Detectar qual sistema operacional estou usando

Para rodar uma aplicação java, primeiramente, basta ter a maquina virtual java instalada, mas e se na minha aplicação java eu mandar executar um comando linux? e rodar essa aplicação no windows, claro que nao funcionará, então, como detectar qual sistema operacional estou rodando minha aplicação java, porque saber isso, exemplo:
Através do código:

Runtime.getRuntime().exec("firefox /home/usuario/link.html");  

Esse comando abrirá um arquivo html no firefox, isso utilizando linux.
e se eu quiser fazer um if para saber qual comando rodar? exemplo:

if (sistemaOperacional = windows) Runtime.getRuntime().exec("roda_comando_do_windows"); if (sistemaOperacional = linux) Runtime.getRuntime().exec("roda_comando_do_linux");

Ou algo parecido, entao minha aplicação funcionaria sem problemas, tanto do windows quanto no linux.

Abraços.

Você pode usar a classe java.util.Properties para recuperar as propriedades do sistema.

Faz algo assim para ver:

    public static void main(String[] args) {
        Properties properties = System.getProperties();
        System.out.println(properties.toString());
        System.out.println( System.getProperty("os.name") ); 
    }

Você tera uma lista de propriedades do sistema, pode usar o nome da propriedade para recupera-la, como no último System.out.print que usei.

Da uma lida nesse tópico http://www.guj.com.br/java/228350-abrir-o-navegador-clicando-na-aplicacao
Talvez seja útil para você.

Valeu galera, essa classe Desktop já conhecia.
Meu objetivo é utilizar a Runtime mesmo, utilizando comandos que se utilizam via terminal do linux ou cmd do windows, como exemplo:
Apagar um arquivo.

Runtime.getRuntime().exec("rm /home/usuario/arquivo");

Ou alguma outra utilidade, mas já tocando no assunto, como apago um arquivo utilizando o Java, tem como? prq esse negocio de apagar arquivo é meio que complicado ne.

Abraços.

pronto, seria algo ± assim, para esse tipo de utilidade:

[code]public static void main(String[] args) {
Properties properties = System.getProperties();
System.out.println("propriedades: " + properties.toString());
System.out.println(System.getProperty(“os.name”));
String so = String.valueOf( System.getProperty(“os.name”) );
System.out.println("O sistema operacional é: " + so);

    if (so.equals("Linux")){
        Runtime.getRuntime().exec("cp /home/usuario_1/arquivo.txt /home/usuario_2");
    }
    if (so.equals("Windows 7")){
        Runtime.getRuntime().exec("copy C:\Users\Usuario_1\arquivo.txt C:\Users\Usuario_2");
    }
}[/code]

Pronto, se for Linux utiliza os comandos adequados para linux, se for windows utiliza os comandos do windows, lembrando que isso é so um exemplo, sei que o comando acima do linux funciona perfeiramente com o Runtime, o comando do windos não testei.
Abraços.

Isso mesmo. Mas claro,você já está vendo os problemas de usar o getRuntime().

Note que você tem mais SOs que o Java é suportado, como o Mac. E sua aplicação não cobriu esse SO extra. Procure sempre usar coisas do próprio java para fazer as coisas. Por exemplo, cópias de arquivos podem ser feitas usando FileChannels.

São raros os comandos que precisam da criação de um novo Process.

[quote=lucasdona]Valeu galera, essa classe Desktop já conhecia.
Meu objetivo é utilizar a Runtime mesmo, utilizando comandos que se utilizam via terminal do linux ou cmd do windows, como exemplo:
Apagar um arquivo.

Runtime.getRuntime().exec("rm /home/usuario/arquivo");

Ou alguma outra utilidade, mas já tocando no assunto, como apago um arquivo utilizando o Java, tem como? prq esse negocio de apagar arquivo é meio que complicado ne.

Abraços.
[/quote]

Para apagar um arquivo em java utilize a classe java.io.File, ela tem vários métodos entre um deles o delete para arquivo ou diretório.

ViniGodoy, ai que tá a Classe Desktop não abre um arquivo .html, só abre um site (se não estou enganado).
exemplo:

public static void abreNavegador(String url) throws Exception { try { URI uri = new URI(url); Desktop desktop = null; if (Desktop.isDesktopSupported()) { desktop = Desktop.getDesktop(); } if (desktop != null) { desktop.browse(uri); } } catch (IOException ioe) { ioe.printStackTrace(); } catch (URISyntaxException use) { use.printStackTrace(); } }

Minha String url que passa como parametro, só abre se for um link válido com http, www, se for um arquivo.html mesmo que esse abra um site, não funciona.
Dentro desse arquivo.html contém algumas configurações que precisam ser iniciadas.
Daí o porquê de eu estar usando a Runtime.

Tenta assim: desktop.open(uri);

Só que o parâmetro tem que ser um File se não me engano.

Só pode ser um File? não pode ser um FileWriter?
:-(.

[quote=lucasdona]Só pode ser um File? não pode ser um FileWriter?
:-(.[/quote]

Conforme a documentação só File.
Mas por que você precisa passar um FileWriter se só precisa passar o caminho do arquivo?

hehehe, porque ja tenho prontin aqui, só que com FileWriter, mas nao precisa ser nao, pode ser File.
Mas não é só abrir o arquivo, tenho que criar esse arquivo tmb e só depois que abro ele, seguinte, de 10 em 10 segundos, gero um arquivo.html com dados atualizados e só depois abro ele.
Abraços.

ViniGodoy, estou com algumas dúvidas.
Notei sim dos problemas que a Runtime pode trazer, mas pensei bem e cheguei a uma conclusão:
Se eu tiver certeza que minha aplicação fará parte somente, do meu produto final, que será utilizado somente em linux e não será uma aplicação comercial.
Logo eu rodar um comando linux com a Runtime, utilizando somente uma linha de código, será menos custoso do que chamar a Desktop e ter que ficar criando instâncias e tudo mais, correto?
Ou existe algum outro problema? exemplo, não é confiável…
Abraços.