# Prüfen ob Textfile existiert



## Schlagdraufunschluss_124 (1. Sep 2017)

Hallo Leute ! 
Ich hab mal wieder ein kleines Problem:

Im grunde will ich mich in meinem kleinen Programm anmelden. Wenn der Benutzername dem System noch nicht bekannt ist, wird eine neue File erstellt, mit dem Benutzernamen als Namen. Dort werden im laufe des Programms Daten abgespeichert. Loggt der Benutzer sich aber mit einem falschen Name ein, so will ich vorher prüfen, ob die Datei existiert. Existiert sie nicht soll der Benutzer sich nochmals einloggen oder ein neues Profil erstellen.

Bis jetzt versuche ich immer das ganze mit".exists()" zu prüfen. Aber irgendwie klappt das nicht so recht.....

Hier werden die Files angelegt:

```
public File erstelleBenutzerVerzeichnis(String benutzerName) {

       File verzeichnis = new File("Speicherverzeichnis");
       File benutzer = new File("Speicherverzeichnis/" + benutzerName + ".txt");
       
       

       if (verzeichnis.mkdir() == false) {
           verzeichnis.mkdir();
       }

       if (benutzer.exists() == false) {
           try {
               benutzer.createNewFile();
           } catch (IOException e) {
               e.printStackTrace();
           }
       }
       return benutzer;
   }
```

In der selben Klasse prüfe ich, ob sie vorhanden sind:

```
public boolean prüfenObDateiExistiert(){
       boolean dateiExistiert = false;
       if(daten.getBenutzerDaten().exists()){
           dateiExistiert = true;
       }
       return dateiExistiert;
   }
```

Das ganze wird in der Main aufgerufen(ist jetzt halt gerade noch etwas "ungeordnet"):

```
// Anmeldung
       int auswahl = eingabe.anmeldung();

       switch (auswahl) {
       case 1:
        // Prüfen ob Datei vorhanden ist, wenn nicht: Fragen ob der Benutzer erneut einloggen will, oder ein neues Profil erstellen will
           break;
       case 2:
           anmeldung.neuesProfil();
           break;
       case 3:
           anmeldung.profilLöschen();
           break;
       }

       // BenutzerName
       String benutzerName = eingabe.leseBenutzerName();
       daten.setzeBenutzerName(benutzerName);
```

Hier noch die anmeldungs-Methode der Eingabe Klasse :

```
public int anmeldung() {
       int auswahl;
       Scanner scr = new Scanner(System.in);

       System.out.println("Was wollen sie machen?");
       System.out.println("1: Mit bestehendem Profil einloggen");
       System.out.println("2: Neues Profil anlegen");
       System.out.println("3: Bestehendes Profil löschen");

       auswahl = Integer.parseInt(scr.next());
       
       return auswahl;

       
   }
[/code ]
```


----------



## JStein52 (1. Sep 2017)

Schlagdraufunschluss_124 hat gesagt.:


> Aber irgendwie klappt das nicht so recht.....


Was passiert


----------



## Schlagdraufunschluss_124 (1. Sep 2017)

Er gibt ne NullPointerException aus.
Edit : Muss ich da nicht irgendwie noch den BenutzerNamen der "exists" als Parameter übergeben, oder wie soll des eigentlich funktionieren?


----------



## JStein52 (1. Sep 2017)

Schlagdraufunschluss_124 hat gesagt.:


> *if*(daten.getBenutzerDaten().exists()){


Ich vermute mal in dieser Zeile ? Ist daten vernünftig belegt ? liefert  daten.getBenutzerDaten() ein File-Objekt zurück ? Ich vermute eines von beiden ist null


----------



## Schlagdraufunschluss_124 (1. Sep 2017)

Ja das hab ich mir auch schon gedacht. Aber wie kann ich am Beginn meines Programms die File initialisieren, wenn ich zuerst noch prüfen will, ob die File existiert? Ich müsste ja die File ja auch in einer TextFile speichern können...


----------



## Schlagdraufunschluss_124 (1. Sep 2017)

JStein52 hat gesagt.:


> liefert  daten.getBenutzerDaten() ein File-Objekt zurück ?


ja


----------



## JStein52 (1. Sep 2017)

Schlagdraufunschluss_124 hat gesagt.:


> wenn ich zuerst noch prüfen will, ob die File existiert? Ich müsste ja die File ja auch in einer TextFile speichern können


 Ich verstehe nicht was du damit sagen willst ? Du erzeugst aus dem Benutzernamen (als String) ein File-Objekt und für dieses rufst du dann exist() auf ???  Oder reden wir aneinander vorbei


----------



## Schlagdraufunschluss_124 (1. Sep 2017)

JStein52 hat gesagt.:


> Du erzeugst aus dem Benutzernamen (als String) ein File-Objekt und für dieses rufst du dann exist() auf ???


Ja genau. Denn mit Exists kann ich ja prüfen ob die File schon existiert was mir wiederum zeigt ob der benutzername Falsch oder richtig ist, da ja die Datei nach dem BenutzerNamen benannt ist.


----------



## Harry Kane (1. Sep 2017)

Schlagdraufunschluss_124 hat gesagt.:


> Muss ich da nicht irgendwie noch den BenutzerNamen der "exists" als Parameter übergeben, oder wie soll des eigentlich funktionieren?


Nein. Die exists-Methode eines Files bekommt keine Parameter.


Schlagdraufunschluss_124 hat gesagt.:


> Aber wie kann ich am Beginn meines Programms die File initialisieren, wenn ich zuerst noch prüfen will, ob die File existiert?


Gar nicht. Du kannst grundsätzlich nie zuerst "etwas" irgendwie prüfen, und dann dieses "etwas" initialisieren.
Soweit ich deine Codeschnipsel richtig interpretiere, hast du es ja schon richtig gemacht (aber wohl noch nicht verstanden).
Wenn du eine NullPointerException bekommst, dann zeig den stack trace, und alle in Frage kommenden Methoden, die den Fehler erzeugen könnten. So ist das nur ein Rumgerate, was wo aus welchem Grund wohl schiefgehen könnte.


----------



## BuddaKaeks (5. Sep 2017)

Kurze Erklärung zur File Klasse:

Ein File-Objekt ist nicht das physikalisch auf der Festplatte gespeicherte File, es ist eher ein Path-Objekt, welches eben den Pfad zu dem tatsächlichen File angibt.
Darauf können gewisse Operationen ausgeführt werden, z.B. exists() gibt zurück, ob an diesem Speicherort tatsächlich ein File liegt, createNewFile() erzeugt an dieser stelle ein neues (leeres) File.

Um auf den Content des Files zuzugreifen, Benutzt man dann die Klassen FileInputStream (zum lesen) und FileOutputStream (zum schreiben)


----------

