ArrayList - Methode zum Speichern eines Eintrags in einer Datei

Diskutiere ArrayList - Methode zum Speichern eines Eintrags in einer Datei im Java Basics - Anfänger-Themen Bereich.
I

iris_anfänger

Hallo zusamen ). Bitte um Hilfe.
Code:
public class Test {

    static ArrayList <String> liste = new ArrayList<>();
    static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    private static String dateiname = "test.txt";
  
    
     static void writeToFile(String dat) {
        try(BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(dat)))) {
            for(String c : liste) {
              writer.write(c);
                System.out.println("Neuer Eintrag wurde gespeichert");
            }
        } catch (IOException e) {
            e.printStackTrace();
          
        }
    }
Nach Aufgabenstellung soll ein neuer Eintrag in bereits vorhandene Datei gespeichert werden. Das Problem, dass bei mir der neue Eintrag tatsächlich gespeichert wird, jedoch alle ältere Einträge werden gelöscht.

Was habe ich falsch gemacht?

liste.add(writer); statt writer.write(c) geht nicht... (
 
I

iris_anfänger

So einfach..... Ich kämpfe schon mehrere Stundeno_O

Danke !!!!!!!!!!!:)
 
I

iris_anfänger

https://docs.oracle.com/en/java/javase/12/docs/api/java.base/java/io/FileOutputStream.html#<init>(java.io.File,boolean)
(mit append = true)
Statt:
Java:
new FileOutputStream(dat)
also:
Java:
new FileOutputStream(dat, true)
Gleich noch eine Frage: zum Löschen aus einer datei geht leider auch nicht
Code:
    public static ArrayList<String> loescheEintrag () {
    System.out.println("Bitte geben Sie Name, die gelöscht werden soll");
    try {
        String name = br.readLine();
         liste.remove(name.toString());
         return liste;
    } catch (Exception e) {
        System.out.println("Eingabefehler");
    }

    }
 
J

Javinner

Du lädst die Datei in eine Liste, dann Löschen, dann was auch immer ansteht, speichern usw.

Nebenbei, schon was von Annotations gehört?
 
mihe7

mihe7

Leider habe nicht ganz richtig verstanden, was du meinst.
Er meint, dass Du erst einmal alle Einträge aus der Datei in eine geeignete Datenstruktur einlesen sollst, dann aus dieser Datenstruktur den gewünschten Eintrag entfernst und abschließend die geänderten Daten wieder in die Datei schreibst. Für einen solchen Zweck eignet sich insbesondere eine Liste als Datenstruktur (s. java.util.List), denn diese ist dynamisch und geordnet.
 
I

iris_anfänger

Danke! Hab die Lösung teilweise verstanden, aber richtig umsetzen kann immer noch nicht:

Code:
    public static void loescheEintrag () {
    System.out.println("Bitte geben Sie das, was gelöscht werden soll");
    ArrayList<String> liste2 = (ArrayList) liste.clone();
    try {
        String name = br.readLine();
         liste2.remove(name);
         ArrayList<String> liste = (ArrayList) liste2.clone();
    } catch (Exception e) {
        System.out.println("Eingabefehler");
    }
    }
 
J

JustNobody

Also:
Da ist ein Zettel, auf dem Du was ändern sollst.
a) Du erzeugst eine Kopie des Zettels (Wäre der clone() Aufruf bei Dir)
b) Auf der Kopie änderst Du etwas. (liste2.remove)
c) Dann schmeisst Du die Kopie weg (Lokale Variable hält die Kopie, d.h. der Garbage Collector kümmert sich dann um die Kopie)

==> Ja, wieso ist der Zettel nach dem Vorgehen unverändert?
 
I

iris_anfänger

==> Ja, wieso ist der Zettel nach dem Vorgehen unverändert?
[/QUOTE]
Gute Frage.........:rolleyes:
 
I

iris_anfänger

Aber ich kopiere Kopie wieder an liste oder nein?
Code:
ArrayList<String> liste = (ArrayList) liste2.clone();
 
I

iris_anfänger

Ich weiß nicht wie man das lösen kann, zu dumm zum programmieren:confused:

Code:
public static ArrayList<String> remove() throws IOException {
    ArrayList<String> liste2 = (ArrayList<String>) liste.clone();
    String name = br.readLine();
    liste.remove(name);
    liste = liste2;
    return liste;

    }
 
mihe7

mihe7

Skizze (kann Fehler enthalten):
Java:
public static List<String> read() throws IOException {
    try(BufferedReader reader = new BufferedReader(new FileReader(dateiname))) {
        String line;
        while ((line = reader.readLine()) != null) {
            result.add(line);
        }
    }
}

public static void write(List<String> lines) throws IOException {
    try(PrintWriter writer = new PrintWriter(new FileWriter(dateiname))) {
        for (String line : lines) {
            writer.println(line);
        }
    }
}

public static void remove() throws IOException {
    List<String> lines = read();
    // z. B. die 5. Zeile entfernen
    if (lines.size() > 4) {
        lines.remove(4);
    }
    write(lines);
}
 
Thema: 

ArrayList - Methode zum Speichern eines Eintrags in einer Datei

Passende Stellenanzeigen aus deiner Region:
Anzeige

Neue Themen

Anzeige

Anzeige
Oben