# java.io.File aus .jar beziehen



## GUI-Programmer (17. Sep 2011)

Hallo

Mein Problem ist folgendes:
Ich möchte einen File direkt vom Projekt einbinden. Das allein hab ich auch dann nach kurzer Suche hinbekommen:

```
private File getFileFromProjectFolder(String filename) {
    	URL url = getClass().getResource("/packageXy/"+filename);
    	File file = null;
    	try {
    		file = new File(url.toURI());
  		} catch(URISyntaxException e) {
  		  	file = new File(url.getPath());
  		}
    	System.out.println(file.getAbsolutePath());
    	return file;
}

File xmlFile = getFileFromProjectFolder("MyXmlFile.xml");
```

Allerdings funktioniert das Ganze dann nicht mehr, wenn man die Applikation per erstellten .jar File öffnet, da das System den angegebenen Pfad nicht finden kann. Das ist ja auch einerseits logisch, da im Pfad dann ja die .jar Datei enthalten ist, welche vom System natürlich nicht als Ordner angesehen wird, sondern als Datei.

Meine Frage ist nun: Ist es denn überhaupt möglich java.io.File's vom System aus einer .jar Datei auslesen zu lassen, und dann auch zu verwenden! Wenn ja, ich bin um jedes Beispiel/Versuch dankbar!

P.S. Ist mir auch egal, wenn ich dafür 100 Programmzeilen mehr brauche!; Habe gehört, dass man per InputStream einen .jar File einlesen kann!?


----------



## maki (17. Sep 2011)

> Meine Frage ist nun: Ist es denn überhaupt möglich java.io.File's vom System aus einer .jar Datei auslesen zu lassen,


Nein, das ist nicht möglich, sind ja keine Dateien mehr sondern Entries in einem Archiv.

Smartly load your properties - JavaWorld


----------



## GUI-Programmer (17. Sep 2011)

Ich bin am verzweifeln!!!
Ich hab es jetzt zwar hingebracht, die .xml Datei in der .jar Datei einzulesen!

```
InputStream inputstream = getClass().getResourceAsStream("/myPackage/GUI Resources.xml");
Document document = null;
try {
	document = new SAXBuilder().build(inputstream);
} catch(Exception ex) {
	ex.printStackTrace();
}
```

Dennoch gelingt es mir nicht nach dem Verändern von document die Änderungen wieder abzuspeichern:

```
XMLOutputter xmloutputter = new XMLOutputter();
xmloutputter.output(document, ""/*Was muss hier geschehen?*/);
```


----------



## GUI-Programmer (17. Sep 2011)

Wenn es wirklich überhaupt nicht möglich ist, dann muss ich wohl noch ein zusätliches JFrame öffnen, bei dem man dann den Pfad des Projekts angiebt, quasi "eine Art von Mini-Installation". Danach dann anschließend die xml Datei in den angegeben Pfad kopieren (mit FileWriter) und im Programm auf den neuen Pfad verweisen

```
String xmlPath = "C:/Program Files (x86)/Mein Programm/Resources/GUI Resources.xml";
```

Aber das sollte dann nun wirklich die letzte Lösung sein, wenn es keine Alternativen gibt.


----------



## maki (17. Sep 2011)

Du kannst kein Jar ändern welches gerade ausgeführt wird.

Den Pfad solltest du dyn. ermitteln.


----------



## GUI-Programmer (17. Sep 2011)

Wie? Bitte ein kleines Code-Beispiel


----------



## maki (17. Sep 2011)

http://www.java-forum.org/allgemeine-java-themen/124186-windows7-liegt-mir-weg.html#post804430


----------

