PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Envirnment-variablen unter Java



Mattburger
09-08-2002, 15:51
Hi,

in Java bekomme ich via System.getProperties() ein paar Systeminformationen heraus.
Aber eigentlich wollte ich die Envirnment-variablen abfragen.
Unix: env.

Hat das schon jemand gemacht ? Oder geht das gar nicht ?

anda_skoa
09-08-2002, 16:20
Hab da mal ins richtige Forum verschoben :)

Leider kann ich dir beim Problem nicht weiterhelfen.
System.getenv ist deprecated, ein Testprogramm hat einen ajav.lang.Error geworfen, als ich es ausprobiert habe :(

Unter Unix könnte man versuchen, env in einem Kindprozess auszuführen und dann den Output zu parsen.

Ciao,
_

Mattburger
09-08-2002, 16:39
Hi anda_skoa,

System.getenv ist durch System.getProperties ersetzt worden. Es werden jedoch nicht die envirnment-variablen vom System sondern die Java-Settings und ein paar Systeminfos (sun.cpu.isalist=pa2.0,file.encoding.pkg=sun.io,.. ) zurückgegeben.

Ich werde deinem Tip mit der Umleitung eines systemkomandos mal nachgehen.
Vielleicht komm ich da weiter.

Danke erst mal.

Grüsse Mike

Mattburger
12-08-2002, 09:11
Hi

ich hab mittlerweile einen Workaround gefunden. Ist aber alles andere als eine saubere Lösung. Ich hoffe jemand von euch hat noch eine elegantere Lösung parat.

import java.lang.Runtime;



Runtime rt = Runtime.getRuntime();
String[] callAndArgs = { "getenv.ksh" };
Process child = rt.exec(callAndArgs);
child.waitFor();
BufferedReader envin= new BufferedReader( new FileReader( "env.log" ) );
String s;
while ( ( (s=envin.readLine()) != null) ) {
configline( s );
}
envin.close();


in getenv.ksh is


env > env.log


Das gefällt mir zwar nicht, aber es funktioniert.

Grüsse

Mike

anda_skoa
12-08-2002, 11:35
Vielleicht könnte man env direkt ausführen und mit Process.getInputStream von dessen stdout lesen.

Irgendwie so:



Process child = rt.exec("env");
BufferedReader envin = new BufferedReader(child.getInputStream());
String s;
while ( ( (s=envin.readLine()) != null) ) {
configline( s );
}
envin.close();


Ciao,
_

Mattburger
13-08-2002, 14:19
Hi anda_skoa,

ich hab das mit dem InputStreamReader hingekriegt.



BufferedReader envin = new BufferedReader( new InputStreamReader(child.getInputStream()));

Die Lösung gefällt mir auch bedeutend besser als der Umweg via Script.
Das ganze läuft übrigens auf einer HP-UX 11. Da zeigt Java mit der Plattformunabhängigkeit echt seine Stärken.


Danke nochmal für den Tip.

Grüsse

Mike