Input/Output Objekte in einer Textdatei ablegen (Highscore)

montii

Mitglied
Hallo,

ich versuche gerade (auf Konsolenebene) eine Highscore in ein Spiel zu implentieren. Ich habe mir ein Objekt erstellt welches sich "score" nennt. Diese score beinhaltet nur primitive Datentypen wie Strings und verschiedene Ints.

Eine Highscore macht aber nur Sinn, wenn ich diese auch in einer Textdatei speichern kann. Meine eigentliche Frage ist also: Wie kann ich ein Objekt in einer Textdatei speichern und später wieder auslesen?

viele Grüße..
 
Ich würde dir raten die Score (Klassennamen groß) per Reader zu schreiben bzw. Writer zu lesen. Objektstreams sind zwar sehr einfacher zu implementieren, aber bringen verschiedene Nachteile mit sich. Z. B. sind sie vergleichsweiße sehr langsam. Außerdem (was ich am schlimmsten finde) sind Klassen kaum änderbar wenn sie serialisiert sind. Ist zwar nützlich wenn man schnell etwas zwischen den selben VM-Versionen übertragen will (Kompatiblität zwischen unterschiedlichen Versionen ist nicht garantiert), aber um Daten zu speichern würde ich definitiv abraten.
 
mh, aber dann kann ich kein ein Objekt speichern oder?

Wenn ich die Daten einfach in eine Textdatei schreibe nach dem Motto:

Hans 5600
Elli 3000

Dann kann ich die Daten nicht sortieren, oder?
 
Klar kannst du die Daten dann noch sortieren. Beim Auslesen erstellst du einfach aus jedem Eintrag deiner Datei ein Score Objekt dass dann entsprechend Comparable implementiert.
 
Ich habe mir mal folgende Testklasse erstellt:

Code:
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

public class WriterTest {

    public static void writeHighscore() {

        try {
            BufferedWriter writer = new BufferedWriter(new FileWriter(
                    "Highscore.txt"));
            writer.write("test1");
            writer.write("test2");
            writer.write("test3");
            writer.close();

        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public static void read() {
        try {
            BufferedReader br = new BufferedReader(new FileReader(
                    "Highscore.txt"));
            String row;
            
            while ((row = br.readLine()) != null) {
                System.out.println(row);
            }

        } catch (IOException e1) {
            e1.printStackTrace();
        }
    }

    public static void main(String[] args) {
        writeHighscore();
        read();
    }
}

Die Klasse schreibt und liest wie gewollt. Wenn ich jetzt aber neue Daten hineinschreiben möchte, überschreibt er mir die Daten die schon in der Datei sind einfach. Wie bekomme ich denn einen Zeilenumbruch in die Datei?
 
Entweder schreibst du das komplette File nochmal und hängst deine neuen Daten einfach hinten dran. Oder du übergibst dem Konstruktor von FileWriter noch nen
Code:
true
:
FileWriter (Java 2 Platform SE v1.4.2)



Indem du einen Zeilenumbruch schreibst. Beispielsweise über die newLine() Methode des BufferedWriters.

Ich sollte mir angewöhnen die Doku zu lesen. Ich danke vielmals! Klappt alles wie gewollt.
 

Zurück
Oben