# fileReader: wird dateipfad benötigt?



## javanoob88 (3. Okt 2010)

Hallo,

kann mir vielleicht jemand bei folgendem Code erläutern, der eine Datei "personFile.txt" Zeile um Zeile auslesen soll, wie hier die Datei angegeben werden muss? Also ist ein Pfad notwendig oder muss die Datei im src Verzeichnis der .java Datei sein?

```
package personFiles;
import java.io.*;

public class PersonFileReader {

    /**
     * @param args
     */
    public static void main(String[] args) {
        try {
//worauf wird hier genau zugegriffen? oder ist der code grundsätzlich blödsinn?
            File personFile = new File("personFile.txt");
            FileReader personFileReader = new FileReader(personFile);
            
            BufferedReader reader = new BufferedReader(personFileReader);
            
            String line = null;
//bei der while schleife bekomme ich den fehler: "the left-hand side of an assignment must be a //"variable
            while ((line = reader.readLine()) =! null){
                System.out.println(line);
            }
            reader.close();
        }
//wozu ist diese exception gut?
        catch(Exception ex){
            ex.printStackTrace();
        }
    }
}
```


----------



## gman (3. Okt 2010)

Hi,

1. In Zeile 19 ist ein Fehler, guck mal hin. Tipp: Operator?

2. Zeile 25: Exception ist die Superklasse von allen Exceptions du kannst sie auch durch die einzelnen
    Exceptions auswechseln die von den benutzten Methoden geworfen werden (z.B. IOException).

3. Kompilierst du auf der Kommandozeile? Dann müsste die Datei in dem gleichen Verzeichnis wie die
    Java- bzw. Class-Datei liegen.


----------



## javanoob88 (3. Okt 2010)

> 1. In Zeile 19 ist ein Fehler, guck mal hin. Tipp: Operator?


 Oo

zu 3. : Benutze eclipse. Da muss die Datei dann vermutlich auch in den selben Ordner, wie die Klasse?!
Wie kann man denn einen Dateipfad angeben, um z.b. eine Datei von einem Server einzulesen?

Danke!


----------



## gman (3. Okt 2010)

Ich glaube wenn du Eclipse benutzt musst du die Datei in das "src"-Verzeichnis packen.

Wenn du eine Datei von einem Server einlesen willst, musst du noch ein wenig mehr
machen als den Pfad zu ändern. Denn die Datei muss dann ja über ein Protokoll (http)
geladen werden, dafür muss dann eine Verbindung zum Server aufgebaut werden......

Wie gesagt, es ist ein bisschen mehr ;-)


----------



## Semox (3. Okt 2010)

Der Zweite Fehler ist hier: String line = null;

Du setzt den String null und wählst als Abbruchbedingung der Schleife - wenn der String null ist... Was er ja initial ist. 

Außerdem muß dann die Textdatei in genau dem Verzeichnis sein, wo die kompilierte *.class Datei zu finden ist.

Hilft das?

Grüße,
Semo


----------



## javanoob88 (3. Okt 2010)

Ja, hilft alles. Vielen Dank soweit.



> Der Zweite Fehler ist hier: String line = null;
> 
> Du setzt den String null und wählst als Abbruchbedingung der Schleife - wenn der String null ist... Was er ja initial ist.



Aber in der Schleife wird line ja reader.readLine zugewiesen. Und das wird dann solange ausgeführt, bis eine Leerzeile kommt oder?

Ok, also habe die Datei nun so ziemlich überall reinkopiert (zu den .class Dateien, deren Überordner, und den .java Dateien + Überordnern), aber es kommt trotzdem noch:


> java.io.FileNotFoundException: personFile.txt (Das System kann die angegebene Datei nicht finden)
> at java.io.FileInputStream.open(Native Method)
> at java.io.FileInputStream.<init>(Unknown Source)
> at java.io.FileReader.<init>(Unknown Source)
> at personFiles.PersonFileReader.main(PersonFileReader.java:12)


Liegt das nur an der Textdatei oder will mir eclipse hier noch andere Fehler mitteilen?


----------



## madboy (3. Okt 2010)

javanoob88 hat gesagt.:


> Aber in der Schleife wird line ja reader.readLine zugewiesen. Und das wird dann solange ausgeführt, bis eine Leerzeile kommt oder?


Nope, so lange, wie die Datei noch nicht zu ende ist 


Mach mal 
	
	
	
	





```
System.out.println(new File(".").getAbsolutePath());
```
 oder so ähnlich. Dann wird dir genau der Pfad ausgegeben, wo die Datei hin muss.


----------



## Murray (3. Okt 2010)

madboy hat gesagt.:


> Mach mal
> 
> 
> 
> ...


Ruhig ohne den Punkt:

```
System.out.println(new File("").getAbsolutePath());
```
Wenn man mit relativen Pfaden arbeitet, ist die Basis immer das Arbeitsverzeichnis der Anwendung ("Working Directory"). In Eclipse kann man das in den Run-Configurations unter Working-Directory angeben; der Default ist normalerweise das Projektverzeichnis (also das Verzeichnis, in dem das src-Unterverzecihnis liegt).


----------



## noobadix (3. Okt 2010)

Wie wär's damit?


```
System.getProperty("user.dir")
```


----------

