# relativer Pfad bei FileInputStream



## Guest (28. Dez 2007)

Die Datei test.txt befindet sich im gleichen Verzeichnis wie die *.java-Datei. Dann muß ich doch eigentlich nicht den kompletten Pfad der Datei angeben und folgendes müßte klappen:


```
new FileInputStream("test.txt")
```

Leider bekomme ich aber diesen Fehler:



> java.io.FileNotFoundException: test.txt (Das System kann die angegebene Datei nicht finden)



Muß ich den kompletten Pfad angeben?

Am liebsten würde ich einen relativen Pfad angeben. Die Datei test.txt befindet sich nämlich immer im gleichen Verzeichnis wie die *.java Datei. Könnt ihr mir sagen wie ich das mache?


----------



## HLX (28. Dez 2007)

Entscheidend ist das Verzeichnis, aus dem du die Anwendung startest.


----------



## The_S (28. Dez 2007)

.java dateien werden außerdem nicht ausgeführt. Deine Datei muss in das selbe Verzeichnis wie die *.class Dateien.


----------



## Guest (28. Dez 2007)

die Datei befindet sich doch im gleichen Verzeichnis wie die *.class Datei. Die *.class ist ja nichts anders als die Anwendung. Demnach liegt die Datei ja IMMER relativ zur *.class-Datei im gleichen Verzeichnis.

Demnach müßte doch folgendes klappen:


```
new FileInputStream(".\\test.txt");
```

Klappt aber nicht...


----------



## Guest (28. Dez 2007)

> .java dateien werden außerdem nicht ausgeführt. Deine Datei muss in das selbe Verzeichnis wie die *.class Dateien.



beim kombilieren mit Eclipse wird die Property-Datei automatisch auch in das Verzeichnis der *.class geschoben.


----------



## The_S (28. Dez 2007)

dass du mit eclipse kompilierst hast, hast du nirgends erwähnt.

Nein, es wird immer im Ausführungspfad gesucht. Wenn du dein Prorgramm so aufrufst



			
				cmd hat gesagt.:
			
		

> C:\ordner\zu\programm\>java MeinProgramm



Dann ist das Ausführungsverzeichnis auch das Verzeichnis, wo "MeinProgramm" liegt. Wenn du jetzt aber



			
				cmd hat gesagt.:
			
		

> C:\java ordner\zu\programm\MeinProgramm



schreibst, dann ist das Ausführungsverzeichnis "C:\". Und wenn alles in einem JAR liegt, dann schaut das Ganze nochmal anderster aus.


----------



## Malcolm X (28. Dez 2007)

Und so?


```
new FileInputStream(  System.getProperty("user.dir") + System.getProperty("file.separator") + "bin\\<Packagename>\\test.txt");
```


----------



## The_S (28. Dez 2007)

kommt aufs selbe drauf zam.


----------



## Guest (28. Dez 2007)

Ich bin jetzt etwas verwirrt...

Wenn ich diese Zeile nehme:


```
new FileInputStream(  System.getProperty("user.dir") + System.getProperty("file.separator") + "bin\\<Packagename>\\test.txt");
```

dann klappt es beim Starten unter Eclipse.

Wenn ich die *.class Datei und die zugehörige Property-Datei allerdings in das Verzeichnis kopiere in dem sie benötigt werden (ein Verzeichnis auf einem Webserver) dann klappt es nichtmehr. 

PS: Die Java-Klasse die die Property-Datei nutzt wird von einer JSP auf dem Apache-Webserver aufgerufen.

Für Tips wäre ich sehr dankbar.


----------



## The_S (28. Dez 2007)

dann lass dir doch mal das aktuelle Verzeichnis ausgeben ...


----------



## Guest (28. Dez 2007)

Das ist ja eben das Problem:

Das aktuelle Verzeichnis würde ich mir in der Java-Klasse mit Hilfe von System.out... ausgeben lassen. Diese Ausgabe kann ich aber nicht sehen, da die Java-Klasse von einer JSP aufgerufen wird und somit keine Consule vorhanden ist. 

Es handelt sich nicht um eine eigene Serveranwendung sondern um eine die ich installiert habe und um entsprechende JSP's bzw. Java-Klassen erweitert habe. Demnach kann ich diese Anwendung nicht aus Eclipse starten und habe keine Console.

Hier der Link zu meinem anderen Thread: 

anderer Thread

Dann verstehst du besser den Zusammenhang.


----------



## The_S (28. Dez 2007)

normalerweiße sollten die System.errs und System.outs in einem logfile hinterlegt werden.

Und wenn du nicht weißt, wo die liegen und du auch keine lust hast sie zu suchen bzw. doku zu lesen, dann geb sie halt testweise auf der jsp oder als js alert aus ...


----------

