CSV auf doppelte Einträge überprüfen

Samofan

Aktives Mitglied
Hallo Community,

ich habe jetzt ewig im Internet gesucht und nichts gefunden, was mir wirklich bei meinem Problem hilft. Ich habe eine UI mit 3 Textfeldern. Dort soll der Vorname, Nachname und eine Nummer (für eine Bestellung) eingegeben werden.
Diese Werte werden dann in eine CSV gespeichert die folgendermaßen aussieht:
Code:
Max|Mustermann|123
Julia|Musterfrau|456
Das Abspeichern geschieht durch einen Button. Dieser zieht sich die Infos aus den Textfeldern und schreibt sie in die CSV. Ich hätte aber gerne, dass die eingegeben Daten (nur Vorname und Nachname) zusätzlich mit den Daten aus der CSV abgeglichen werden und dass man die Möglichkeit hat, entweder die Daten aus der CSV zu überschreiben oder zu ersetzen.
Code des Buttons:
Code:
@FXML
    private void handleButtonOk(ActionEvent event) throws IOException {
        //get information from textfields
        vorname = textVorname.getText();
        nachname = textNachname.getText();
        nummer = Integer.parseInt(textNummer.getText());
    
        //check if data already exists
        checkDouble();
    
        //write information into csv file
        writeFile();

        //reset textfields
        textVorname.setText("");
        textNachname.setText("");
        textNummer.setText("");
    }
Und Code der writeFile(); Klasse:
Code:
//following method writes the information into the csv file
    private void writeFile() {
        FileWriter writer;
        File file;
        //create new File; if it already exists add content
        file = new File("C:\\Users\\[User]\\Desktop\\liste.csv");
        try {
            //new File
            writer = new FileWriter(file, true);
            //writer writes data
            writer.write(vorname + "|");
            writer.write(nachname + "|");
            writer.write(nummer + "|");
            //seperate line after writing data
            writer.write(System.getProperty("line.separator"));
            // flush and close writer
            writer.flush();
            writer.close();
        } catch (IOException e) {
        }
    }
Im Internet habe ich gelesen, dass ich die CSV in eine Hashmap einlesen soll und dann die Werte vorname und nachname abgleichen soll. Bei der Umsetzung hakt es bei mir.
Ich bedanke mich schonmal im voraus für Eure Hilfe. Bin neu als Java Entwickler und habe schon so viel in diesem Forum lernen können! Achso: Falls ich im falschen Thema bin, bitte verschieben oder mich belehren 🙂
 
Zuletzt bearbeitet:
Hmm da gibt es mehrere Herangehensweisen.
Eine einfache wäre diese:
Du erstellst den Gesamtstring, den du einfügen möchtest:
Code:
String datensatz = "Max|Mustermann|123";
Danach kannst du mittels einem Lambdaausdruck prüfen, ob der Datensatz schon vorhanden ist:
Java:
File csv = new File(csvDatei);
boolean datensatzVorhanden = Files.readAllLines(csv.toPath() ).stream().anyMatch( (s) -> s.equals( datensatz));
und dann entsprechend weiter verfahren.
 
Du erstellst den Gesamtstring, den du einfügen möchtest [...] Danach prüfen, ob der Datensatz schon vorhanden ist.
Ja das ist eine gute Idee. Ich würde aber am liebsten nur den Vor- und den Nachnamen vergleichen. Die Nummer darf variieren. Es ist quasi dazu gedacht, entweder die bestehende Bestellung zu überschreiben oder eine weitere hinzu zu fügen.
 
In dem Fall hat die Variable "datensatz" den Wert "Max|Mustermann" und der Rest würde lauten:
Java:
File csv = new File(csvDatei);
boolean datensatzVorhanden = Files.readAllLines(csv.toPath() ).stream().anyMatch( (s) -> s.startsWith( datensatz));
Alternativ ließe sich das auch mit einem Regex prüfen.
 

Zurück
Oben