# Relativer Pfad auf Datei im Projektordner



## fhaslbs (26. Aug 2011)

Hallo zusammen

Ich habe ein kleines Programm geschrieben welches u.a ein .txt File einliest.
Diese Datei liegt in einem unterordner des Projektordners:

Projektordner
      -test.java
      -Folder
          -MyTextFile.txt

Wie greife ich nun von meinem test. java in das MyTextFile.txt zu? Ich habe es mit Folder/MyTextFile.txt versucht, was meiner Meinung nach logisch währe, doch es wird jedes mal eine IO-Exception ausgelöst.

Wenn ich einen absoluten Pfad angebe (z.B C:/MyTextFile.txt) funktioniert alles wunderbar.

Vielen Dank im voraus!


----------



## SamHotte (26. Aug 2011)

Probier' mal "./MyTextFile.txt" und schau ggf. im CLASSPATH, ob dort der "." auch drin steht.

/edit: Dateiname korrigiert


----------



## Michael... (26. Aug 2011)

Man könnte es über via InputStream über die Klasse bzw. den ClassLoader laden:
getResourceAsStream(String)


----------



## pl4gu33 (26. Aug 2011)

wenn du den Ordner kennst kannst du auch so vorgehen:

File ordner=new File("Ordnername");
File[] fileListe=ordner.listFiles();

und dann kannst du dir das File aus dem Array holen

wenn dus mit einem Pfad machen willst geht es so 

File ordner=new File("test//test.txt");		
System.out.println(ordner.exists());   //true


----------



## Michael... (26. Aug 2011)

So wie ich das verstanden habe sind sowohl Ordner als auch Datei bekannt.


> File ordner=new File("Ordnername");
> File[] fileListe=ordner.listFiles();


Das funktioniert nur, wenn die Anwendung aus dem Verzeichnis in dem sich auch "Ordnername" befindet gestartet wird.


----------



## pl4gu33 (26. Aug 2011)

Michael... hat gesagt.:


> So wie ich das verstanden habe sind sowohl Ordner als auch Datei bekannt.
> 
> Das funktioniert nur, wenn die Anwendung aus dem Verzeichnis in dem sich auch "Ordnername" befindet gestartet wird.



jop... ich hatte jetzt gedacht, dass es gegeben ist, dass der Ordner immer dabei is,... zumindest habe ich den Text oben so verstanden


----------



## fhaslbs (26. Aug 2011)

Vielen Dank erstmal für die Antworten - ich habe es nun mit der Methode von pl4gu33 versucht.



pl4gu33 hat gesagt.:


> wenn du den Ordner kennst kannst du auch so vorgehen:
> 
> File ordner=new File("Ordnername");
> File[] fileListe=ordner.listFiles();
> ...




Merkwürdig ist, dass ich eine NullPointerException bekomme wenn ich meinem BufferedReader das File übergeben möchte
[JAVA=42]BufferedReader in  = new BufferedReader(new FileReader(fileListe[0]))[/code]

Das würde ja bedeuten dass der dankt das der Order gar nicht existiert. 

Wo würdet ihr eigentlich ein .txt File hinpflanzen, wenn ihr es schlussendlich mit dem Programm zusammen mitliefern wollt?


----------



## snot (26. Aug 2011)

Hi,
was bekommst du wenn du in deiner Datei test.java folgende Test-Funktion aufrufen lässt ?


```
public static void testPath(){
	File file = new File("Folder/MyTextFile.txt");
	System.out.println(file.getAbsolutePath());
	}
```


----------



## Michael... (26. Aug 2011)

fhaslbs hat gesagt.:


> Merkwürdig ist, dass ich eine NullPointerException bekomme wenn ich meinem BufferedReader das File übergeben möchte
> [JAVA=42]BufferedReader in  = new BufferedReader(new FileReader(fileListe[0]))[/code]
> 
> Das würde ja bedeuten dass der dankt das der Order gar nicht existiert.
> ...


Wie gesagt, hängt der Erfolg dieser Vorgehensweise davon ab, von welchem Verzeichnis aus die Anwendung gestartet wird und wo sich die File erzeugende Klasse befindet.

Wenn das txt-File nur gelesen werden soll, würde ich es mit dem Code in ein jar exportieren und dann per getResourceAsStream(...) auslesen.


----------



## pl4gu33 (26. Aug 2011)

```
File ordner=new File("test");
		File[] ordnerListe=ordner.listFiles();
		File datei=ordnerListe[0];
		try {
			BufferedReader in  = new BufferedReader(new FileReader(datei));
			String zeile=in.readLine();
			System.out.println(zeile);
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
```

also bei mir steht dann im Syso "hallo" was auch die erste Zeile meiner TXT ist.
wenn die Datei auch wirklich in dem Ordner ist, wo sie hingehört ,... s.h. Michaels Beitrag

mit anderen Worten wenn du nen JAR erstellst musst du beim JAR auch immer den Ordner dabei haben, wo die Textdatei drin ist^^


----------



## fhaslbs (26. Aug 2011)

snot hat gesagt.:


> Hi,
> was bekommst du wenn du in deiner Datei test.java folgende Test-Funktion aufrufen lässt ?
> 
> 
> ...



C:\iMacros\Folder\MyTextFile.txt

Das mit dem getResourceAsStream gefällt mir.

- gibt es eigentlich eine vordefinierte methode umd die blöden \ von windows automatisch mit / zu ersetzen soblad ich den getAbsolutePath() einsetze?


----------



## SamHotte (26. Aug 2011)

fhaslbs hat gesagt.:


> gibt es eigentlich eine vordefinierte methode umd die blöden \ von windows automatisch mit / zu ersetzen soblad ich den getAbsolutePath() einsetze?




```
"".replace('\', '/');
```


----------

