nitro2k01Medlem sedan aug. 20037 630 inlägg
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 440 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
nitro2k01Medlem sedan aug. 20037 630 inlägg
Hu-hum, nu var det alltså en funktion i Java som jag letar efter.
dAEkMedlem sedan feb. 20041 777 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
nitro2k01Medlem sedan aug. 20037 630 inlägg
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. 2004504 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.
sgtpepperMedlem sedan apr. 20005 524 inlägg
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.
nitro2k01Medlem sedan aug. 20037 630 inlägg
Så man kan fånga en ström bara sådär. Tack iaf!