# Zugriff auf Dateien in jar-Datei



## Gast (22. Jan 2008)

Ich versuche auf eine Datei in einer jar-Datei zuzugreifen mit.

Folgende Verzeichnisstruktur:

Projekt
|
|--src
|##|
|##|--MainClassDatei
|        
|--txt
 ##|
 ##|--meine.txt 


```
Class c=MainClassDatei.class;

	InputStream in=c.getResourceAsStream("../txt/meine.txt");
```

Im Eclipse (WinXP) funkioniert dies auch tadellos, nur in der mit Fat Jar erzeugten jar-Datei will das nicht gelingen.


----------



## The_S (22. Jan 2008)

"Was sollen die ".." am Anfang? Brauchst du nicht! XP ist nicht Case Sensetive, in einer JAR sind es die Dateien sehr wohl (überprüfen).


----------



## Gast (22. Jan 2008)

ohne die ".." wird der BufferedInputStream nicht gefüllt, dann funktioniert es auch nicht auf bei Ausführung auf Eclipse. Kann ich etwas beim Class-Path bei der jar-Datei einstellen?


----------



## The_S (22. Jan 2008)

Er wird nicht "gefüllt"? Was hat das mit dem Classpath zu tun? ???:L

wird die .txt denn überhaupt mit ins JAR gepackt!? Schaut für mich so aus, als würde die txt außerhalb liegen.


----------



## Gast (22. Jan 2008)

Die txt-Datei existiert in der jar-Datei unter dem vermuteten Pfad. Wenn ich das Verzeichnis der txt-Datei in das Verzeichnis der MainClassDatei lege, funktioniert der Aufruf:


```
Class c=MainClassDatei.class; 
    //Verzeichnis txt jetzt in Verzeichnis src ->funktioniert im Eclipse und in der jar-Datei
    InputStream in=c.getResourceAsStream("txt/meine.txt");
```
... hingegen ...

```
Class c=MainClassDatei.class; 
    //Verzeichnis txt unterhalb Verzeichnis src ->funktioniert im Eclipse, nicht in der jar-Datei
    //Effekt, als wäre sie nicht erreichbar, Lösung???
    InputStream in=c.getResourceAsStream("../txt/meine.txt");
```


----------



## The_S (22. Jan 2008)

txt unterhalb von src? Ich denke die sind auf gleicher Ebene (laut deiner Abbildung deines 1. Posts)? Relevant ist übrigens das bin-Verzeichnis. Und mach das mal so


```
getClass().getResourceAsStream
```

Und nicht über irgendwelche anderen Instanzen irgendwelcher Klassen


----------



## Gast (22. Jan 2008)

das funzt, thank's a lot.   

Auch wenn das auf meine Kappe ging, das Verhalten des Eclipse, die Applikation auszuführen, war hier nicht korrekt. Seufz. :noe:


----------



## The_S (22. Jan 2008)

Natürlich war das Verhalten korrekt. Eclipse führt nicht aus, die JRE führt aus. Eclispse startet nur die JRE.


----------



## Gast (22. Jan 2008)

... das wäre dann wohl schlimmer, oder?


----------



## The_S (22. Jan 2008)

Auch die JRE hat hier nichts verbockt. Es ist einfach ein Unterschied, ob eine Datei in einem Jar oder außerhalb eines Jars liegt.


----------



## Wildcard (22. Jan 2008)

Gast hat gesagt.:
			
		

> Auch wenn das auf meine Kappe ging, das Verhalten des Eclipse, die Applikation auszuführen, war hier nicht korrekt. Seufz. :noe:


Aus welchem Teil der API-Doc oder Java Language Specification schließt du das?


----------



## Gast (22. Jan 2008)

das ist die Lösung des eigentlichen Problems:


```
Class c=MainClassDatei.class.getClassLoader(); 

    InputStream in=c.getResourceAsStream("txt/meine.txt");
```

Danked dem Österreicher.


----------



## Sonic (29. Mrz 2008)

Hallo

ich habe die Suchfunktion sowie Mr. Googel vergebens verwendet. Ich kann mir gut vorstellen das diese Frage zum 100mal gestellt wird. Aber ich bekomme es einfach nicht hin. :cry:  

Ich entwickle mit Eclipse und habe mir einen Projektordner angelegt wo alle wichtigen Informationen drin sind. nun möchte ich Java-Dateien aus der Jar-Datei lesen. Die Struktur meines Projektes wird mithilfe des Linkes verdeutlicht. Ich habe nur Pakages, ich denke das ist das Problem. Die Dateien befinden sich in der Jardatei! hab schon nachgeschaut. 

Mein Code:

```
String thisLine;
				try {
					BufferedReader in = new BufferedReader(	new InputStreamReader(getClass().getResourceAsStream("/daten/eins/eins.java")));
					while ((thisLine = in.readLine()) != null) {
						jta_anzeige.append(thisLine);
						jta_anzeige.append("\n");
						try {
							Thread.sleep(1000);
						} catch (InterruptedException ee) {
						}
					}
					in.close();
				} catch (Exception ex) {
					System.out.println("error " + ex);
				}
```

Bild:
http://www.tutorials.de/forum/attachments/java/38404d1206794566-txtladen.jpg


----------



## The_S (31. Mrz 2008)

Der Link führt ins Leere ...


----------

