vote up 0 vote down
star

Hallo,

ich habe ein Programm in einem JAR-File, die auf eine im selben Verzeichnis liegende Properties-Datei zugreift:

Properties props = new Properties();
props.loadFromXML(new FileInputStream("meine.properties.xml"));

Das klappt, solange ich das Programm starte, während ich in demselben Verzeichnis bin. Starte ich es als Teil eines Skriptes aus einem anderen Ordner, so wird die Properties-Datei nicht gefunden. Ich möchte natürlich den Speicherort der Properties-Datei nicht hartkodieren. Ich habe es (mglw falsch) auch mit dem Classpath probiert:

D:\sonstewo>java -jar d:\MeineProgramme\MeinProgramm.jar -cp d:\MeineProgramme

Hat aber auch nicht funktioniert. Ich würde die ganze Sache gerne so einfach wie möglich machen, um das Programm jederzeit auch woanders einsetzen zu können. Kann man nicht aus dem JAR heraus den Ordner finden, in dem es liegt?

Danke im Voraus Norbert

flag

1 Answer

vote up 1 vote down
check

Ich kenne Deine Anforderungen nicht genau, aber die Idee mit dem Classpath ist eigentlich richtig und wird IMHO auch in der Praxis so verwendet. Sprich:

InputStream is=getClass().getResourceAsStream("props.properties");
Properties props=new Properties();
props.load(is);

ist das häufig genutzte System. Dafür muß die Properties-Datei, richtig, im Classpath auch liegen. FileInputStream setzt einen Dateipfad voraus, und keinen Classpath.

link|flag
1 
Der letzte Satz war der Schlüssel. Ist aber nicht so einfach mit dem Classpath. Habe nun in der Manifest-Datei des Jar den Eintrag "Class-Path: ." und lese die Ressource aus ClassLoader.getSystemResourceAsStream("meine.properties.xml"). So funktioniert es. – norbertkulawik.verisignlabs.c Jan 14 at 9:42

Your Answer

Get an OpenID
or

Not the answer you're looking for? Browse other questions tagged or ask your own question.