Angenommen, du moechtest die beiden Werte, die verrechnet werden sollen sowie den Operator speichern. Dazu kannst du folgenden Code verwenden:
Erstelle eine neue Datei "CalculatorData.java" mit folgendem Inhalt:
Code:
public class CalculatorData implements java.io.Serializable {
public int numberA;
public int numberB;
public char operator; // -, +, * oder /
}
Jetzt verwende folgende Methoden:
Code:
public static void store(String file, int numberA, int numberB, char operator) throws Exception {
CalculatorData data = new CalculatorData();
data.numberA = numberA;
data.numberB = numberB;
data.operator = operator;
try (ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream(file))) {
out.writeObject(data);
}
}
public static CalculatorData load(String file) throws Exception {
try (ObjectInputStream in = new ObjectInputStream(new FileInputStream(file))) {
return (CalculatorData) in.readObject();
}
}
So verwendest du die Methoden:
Code:
// Programm wird beendet
store("savefile.object", numberA, numberB, operator);
Code:
// Programm wird gestartet
CalculatorData data = load("savefile.object");
int numberA = data.numberA;
int numberB = data.numberB;
char operator = data.operator;
Wenn du pruefen moechtest, ob eine Datei vorhanden ist (um zum Beispiel die Frage zu beantworten: Wurde der Zustand schon einmal gespeichert?) machst du das so:
Code:
if (new File("savefile.object").exists()) { // java.io.File stellt einige Methoden zur Verfuegung, um mit dem Dateisystem zu interagieren; zum Beispiel um zu pruefen, ob eine Datei existiert mittels exists()
// Datei existiert
} else {
// Datei existiert nicht
}
Jetzt noch etwas Erklaerung:
Mit CalculatorData erstellst du eine Klasse, die eben den Zustand in den Attributen speichert. Das Interface

will gar nicht, dass irgendwelche Methoden implementiert werden; das muss eine Klasse aber implementieren, damit sie serialisiert (= Objekte koennen irgendwo hin geschrieben und von irgendwo gelesen werden) werden kann.
Der Plan ist jetzt, die drei Werte, die gespeichert werden sollen, in ein Objekt von CalculatorData zu packen, und das Objekt dann auf die Festplatte zu speichern. Genau das macht die store Methode: Objekt anlegen, Daten in die Attribute schreiben, und dann schreibt
Code:
try (ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream(file))) {
out.writeObject(data);
}
das Objekt auf die Festplatte. Wenn du mehr ueber das Lesen und Schreiben von Daten irgendwo hin wissen willst, kannst du dir die Klassen InputStream und Unterklassen ansehen, und dazu das Design Pattern "Dekorator".
Die load Methode macht das dann umgekehrt, der Inhalt von der Festplatte wird wieder gelesen, und von Java in ein Objekt verwandelt. Von dem werden dann wieder die Attribute gelesen.
Der Vorteil von der Methode ist, dass sie recht einfach ist. Der Nachteil ist, dass du die Daten, die dann auf die Festplatte geschrieben werden (savefile.object) nicht in Notepad oder so bearbeiten kannst, wie es zum Beispiel bei XML Dateien moeglich ist.