BenutzerDaten teilweise ändern in txt Datei

Grazzle

Mitglied
Schönen guten Morgen,
ich speichere für einen Login Prozess in einem Stundenplaner UserDaten in einer .txt Datei ab. Ich gebe auch die Möglichkeiten diese zu ändern, jedoch habe ich das Problem, dass ich, wenn ich möchte, dass nur ein Teil der Daten geändert werden möchte, die restlichen aus der Txt Datei einfach rausgelöscht werden, anstatt das sie den alten Wert behalten. Wie kann ich das ändern?

Hier der relevante Code
Java:
public static void bearbeitenBenutzer(String userName, String[] daten)
        throws IOException {

        ArrayList<String> userDaten = new ArrayList<String>();

        String inhaltVonDatei;
        int arrayGroesse;

        String passwort = daten[0];
        String studiengang = daten[1];
        String ects = daten[2];

        File datei = new File(userName + ".txt");

        BufferedReader read = new BufferedReader(new FileReader(datei));

        while ((inhaltVonDatei = read.readLine()) != null) {
            userDaten.add(inhaltVonDatei);
        }

        userDaten.set(1, passwort);
        userDaten.set(2, studiengang);
        userDaten.set(3, ects);

        arrayGroesse = userDaten.size();

        // true damit der Text angehängt wird, false(oder ohne)
        // wird die Datei komplett überschrieben
        FileWriter write = new FileWriter(userName 
            + ".txt", false);

        for (int a = 0; a < arrayGroesse; a++) {
            write.write(userDaten.get(a));
            write.append(System.getProperty("line.separator"));
        }

        read.close();
        write.close();
    }

und in dem GUI fenster
Java:
btnSpeichern.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent event) {
                String[] daten = new String[4];
                daten[0] = txtNeuPasswort.getText();
                daten[1] = txtNeuStudiengang.getText();
                daten[2] = txtNeuECTS.getText();
                daten[3] = txtNeuPasswortNochmal.getText();
                AktuelleSitzung.
                        getBenutzer();
                    try {
                        UserVerwaltung.bearbeitenBenutzer(
                                    Benutzer.getUserName(), daten);
                    } catch (IOException exc) {
                        // TODO Auto-generated catch block
                        exc.printStackTrace();
                    }
                    AktuelleSitzung.getAktuelleSitzung();
                    if (!daten[1].isEmpty()) {
                        AktuelleSitzung.getBenutzer().setStudiengang(daten[1]);
                    } 
                    if (!daten[2].isEmpty()) {
                        AktuelleSitzung.getBenutzer().setEcts(daten[2]);    
                    }
                   
                    if (!daten[0].isEmpty() && !daten[3].isEmpty() 
                        && daten[0].equals(daten[3])) { 
                    AktuelleSitzung.getBenutzer().setPasswort(daten[0]);
                    }
                    dispose();
            }        
        });
 
Zeile 0 sollte das Passwort sein, Zeile 1 der Studiengang, Zeile 3 ects ?? Auf jeden Fall liest du es mit dieser Erwartung ein. Und dann schreibst du in eine Zeile Passwort, Studiengang und ects, und danach noch evtl. andere Daten und dann einen Zeilenvorschub ?!

Edit: Sorry habe gerade gesehen alles um eins verschoben, also 1, 2 und 3
 
d.h. er hat für passwort und ects nur eine Leerzeile geschrieben. Hast du dir mal angeschaut was in
Code:
daten[0], daten[1], daten[2]
drin steht ?
 
Java:
daten[0] = txtNeuPasswort.getText();
                daten[1] = txtNeuStudiengang.getText();
                daten[2] = txtNeuECTS.getText();
                daten[3] = txtNeuPasswortNochmal.getText();


Ja, ich bin davon ausgegangen, dass durch die if-Abfrage sich der Code in den nicht beschriebenen Zeilen nicht verändert und gleich bleibt...ja das naive denken eines unerfahrenen Programmierers 😀
 
Er erhaelt am anfang der Methode den Text aus dem Array, aber ich dachte, dass durch die IfAbfrage, der gar nicht erst neu beschrieben wird, wenn in den Zeilen nichts drin steht... Also schätze ich nein :/
 
Mittlerweile hab ich immerhin festgestellt, dass der Fehler in der Klasse UserVerwaltung liegt, sprich bei
Java:
public static void bearbeitenBenutzer(String userName, String[] daten)
        throws IOException {

        ArrayList<String> userDaten = new ArrayList<String>();

        String inhaltVonDatei;
        int arrayGroesse;

        String passwort = daten[0];
        String studiengang = daten[1];
        String ects = daten[2];

        File datei = new File(userName + ".txt");

        BufferedReader read = new BufferedReader(new FileReader(datei));

        while ((inhaltVonDatei = read.readLine()) != null) {
            userDaten.add(inhaltVonDatei);
        }

        userDaten.set(1, passwort);
        userDaten.set(2, studiengang);
        userDaten.set(3, ects);

        arrayGroesse = userDaten.size();

        // true damit der Text angehängt wird, false(oder ohne)
        // wird die Datei komplett überschrieben
        FileWriter write = new FileWriter(userName + ".txt", false);

        for (int a = 0; a < arrayGroesse; a++) {
            write.write(userDaten.get(a));
            write.append(System.getProperty("line.separator"));
        }

        read.close();
        write.close();
    }

Ich würde behaupten bei dem part
Java:
        userDaten.set(1, passwort);
        userDaten.set(2, studiengang);
        userDaten.set(3, ects);

aber ich hab keine wirkliche idee, wie ich das fixen könnte.
 
Vielleicht so:
Code:
if (!"".equals(passwort) {
    userDaten.set(1, passwort);
}
if (!"".equals(studiengang) {
    userDaten.set(2, studiengang);
}
if (!"".equals(ects) {
    userDaten.set(3, ects);
}
 
Nur grob überflogen, aber warum benutzt du static und warum hast du kein Objekt für die Benutzerdaten? Das dürfte das deutlich weniger Fehleranfällig machen...
 

Neue Themen


Zurück
Oben