Prüfen ob Textfile existiert

Schlagdraufunschluss_124

Aktives Mitglied
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:
Java:
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:
Code:
    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"):
Java:
    // 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 :
Java:
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 ]
 
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...
 
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.
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.
 
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)
 

Zurück
Oben