Hej! Vet ni hur man känner av vilket operativsystem som ens applikation kör på? Jag behöver skilja ut tre huvudgrupper:
- Windows 9x
- Windows 2000/XP
- Unix-varianter
Dessutom skulle jag behöva köra ett konsolkommando om det är Windows 9x som körs, och samla in dess utdata. Finns det inget klockrent sätt att göra detta, så kan jag nöja mig med hur man kallar på ett externt kommando, så kan jag fixa dataläsningen själv.
legisMedlem sedan juli 20044 453 inlägg Känner inte till något sätt att göra det med java som täcker alla plattformar. För Windows finns GetVersion. Nog inte bästa sättet men ändå:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/sysinfo/base/getting_the_system_version.asp
Hu-hum, nu var det alltså en funktion i Java som jag letar efter.
dAEkMedlem sedan feb. 20041 816 inlägg Bra url: http://www.tolstoy.com/samizdat/sysprops.html
Syntax är alltså System.getProperty("os.name");
Men jag har för mig att jag läst nånstans på sun's forum att os.name inte behöver returnera "rätt", det är upp till var JVM.. minns att jag också läste nåt om att en JVM gav en "windows 95" fastän det kördes på en '98-burk.
Hade denna länk bland mina bookmarks också: http://forum.java.sun.com/thread.jspa?forumID=4&threadID=523689
Vet inte om jag hjälper nåt eller bara förvirrar, jag känner mig rätt förvirrad :p
95, 98 och me går under samma kategori denna gång, så det är inget problem. Och jag ska bara använda av sun VM, så det går nog bra. Den länken var användbar.
Åter till min andra fråga, hur kör man systemkommandon, med andra ord startar program i värdmiljön? (Bara aktuellt för Windows för övrigt)
jonnyzMedlem sedan okt. 2004502 inlägg Är det något i stil med
Process p = Runtime.getRuntime().exec(cmdline);
du är ute efter?
cmdline är en sträng som skickas till operativsystemet.
nitro2k01 skrev:
Åter till min andra fråga, hur kör man systemkommandon, med andra ord startar program i värdmiljön? (Bara aktuellt för Windows för övrigt)
Använd klassen Runnable:
try {
String cmd = "ver";
Process process = Runtime.getRuntime().exec(new String[]{"cmd.exe", "/c", cmd});
BufferedReader br = new BufferedReader(new InputStreamReader(process.getInputStream()));
String line = "";
while((line = br.readLine()) != null) {
System.out.println(line);
}
} catch(IOException ioe) {
ioe.printStackTrace();
}
Eftersom vi vill köra ett systemkommando så anropar vi det via cmd.exe med växeln /c (Carries out the command specified by string and then terminates). Process-objektet som du får i retur från exec() ger dig en in- och en utström.
// EDIT: cmd.exe-joxet gäller självklart i en WIN-miljö, i en UNIX-miljö så kör man via lämpligt skal, t.ex bash.
Så man kan fånga en ström bara sådär. Tack iaf!