Load properties-file in jar

Maik639

Erfahrenes Mitglied
Hi Leute,

ich habe folgendes Problem:
Ich möchte ein Property-File öffnen, welches sich in meiner Jar befindet.
Wenn ich das Programm in Eclipse teste ist das kein Problem, wahrscheinlich
weil es zu dem Zeitpunkt noch keine Jar ist. Mit folgender Codezeile bestimme
ich den Pfad in dem sich das File befindet:
Code:
filename = new File(Config.class.getProtectionDomain().getCodeSource()
				.getLocation().getPath())
				+ "\\XXX\\XXX\\XXX\\Config.jcfg";
// in meinem Code stellen die XXX den Pfad der Package in der Jar dar.

ich hoffe ihr könnt mir helfen.

Mit freundlichen Grüßen,

Maik
 
Hallo
Auf Dateien in deinem Jar-File kannst du so zugreifen:
Java:
// lädt eine Datei aus dem Paket res.Status mit dem Namen "0_Waiting.png".
URL url = EineKlasse.class.getResource("/res/Status/0_Waiting.png");
// alternativ gibt es noch die Methode
InputStream is = EineKlasse.class.getResourceAsStream("/pfad/zur/Resource");

//lädt eine Property-datei: 
ResourceBundle resourceBund = ResourceBundle.getBundle("localTransfer1.settings");
// Bitte beachten: die Datei muss im selben Paket liegen und je nach Locale können andere Dateien geladen werden
 
hi,
danke für deine antwort=)
ich bekomme allerdings immer nullpointer, ich denke ich habe oben ein bissi zu wenig gepostet..
das its das entscheidene stück:
Code:
	public void readConfig() {
		filename = new File(Config.class.getProtectionDomain().getCodeSource()
				.getLocation().getPath())
				+ "\\die\\package\\derclasseundconfig\\Config.jcfg";
		try {
			propInputFile = new FileInputStream(filename);
			properties.load(propInputFile);
 
Wo bekommst du denn die NullPointerException (bitte Zeile in deinem geposteten Code verraten)?
Wie sieht sie denn aus (welche Variable ist null)?
 
Code:
 propInputFile = new FileInputStream(filename);
dort kommt sie, weil ich wohl zu "dumm" bin um die datei richtig auszulesen
(btw. wenn sie nicht in er jar ist, ist es kein problem)
 
private String filename, username, password, lastpath;
private boolean autologin, isLanguageDE, savelogindata;
private FileOutputStream propOutputFile;
private FileInputStream propInputFile;
private Properties properties = new Properties();

String =) der rest in der klasse ist dann nur auslesen setter getter oder wieder speichern
 
Java:
propInputFile = Config.class.getResourceAsStream("/pfad/zur/Resource"); //Achtung: nicht den Backslash verwenden, auch nicht unter Windows!!

Oder alternativ (wenn die Properties-Datei im selben Verzeichnis liegt wie die Klasse) würde ich lieber mit ResourceBundle arbeiten:
Java:
ResourceBundle resourceBundle = ResourceBundle.getBundle("config.settings");
Wie diese Variante mit anderen Pfaden arbeitet, weiß ich nicht (musst du ausprobieren oder Dokumentation lesen)
 
Exception in thread "main" java.lang.Error: Unresolved compilation problem:
Type mismatch: cannot convert from InputStream to FileInputStream

at de.xxx.yyy.Config.readConfig(Config.java:44)

das bekomm ich
 
Zuletzt bearbeitet:
Ändere einfach den Datentyp von "propInputFile" von FileInputStream auf InputStream.

Nebenbei: nutzt du keine IDE wie Eclipse, die dir solche Lösungen selbstständig vorschlägt?
 
Zurück