Dateizugriff (2)
Objekte in Dateien schreiben
Nehmen wir an, Sie haben eine bescheidene kleine Klasse mit einem Attribut, einem Getter und einem Setter:
import java.io.*;
public class MeineKlasse implements Serializable {
private String einAttribut;
public String getEinAttribut() {
return einAttribut;
}
public void setEinAttribut(String einAttribut) {
this.einAttribut = einAttribut;
}
}
Sie benötigen nun ein Programm, das Objekte dieser Klasse erfassen, in einer
Datei abspeichern und wieder laden kann.
Hier ist es. Da die Lese-und Schreibroutine unabhängig vom
Inhalt der Klasse ist, lässt es sich leicht an umfangreichere Klassen anpassen.
Einzige Voraussetzung: Ihre Klasse muss die Klasse "Serializable"
implementieren.
import java.util.*;
import java.io.*;
public class Objektdatei {
public static MeineKlasse[] objektFeld = new MeineKlasse[1000];
public static int anzahlObjekte = 0;
public static void schreibeObjekte(MeineKlasse[] objektFeld) {
try {
FileOutputStream fileStream = new
FileOutputStream("Meine Objekte.dat");
ObjectOutputStream os = new ObjectOutputStream(fileStream);
int index=0;
while (objektFeld[index]!=null){
os.writeObject(objektFeld[index]);
index++;
}
os.close();
} catch (IOException ex) {
ex.printStackTrace();
}
}
public static MeineKlasse[] liesObjekte() {
int index=0;
try {
ObjectInputStream is = new ObjectInputStream(new
FileInputStream("Meine Objekte.dat"));
do {
Object o = is.readObject();
objektFeld[index] = (MeineKlasse) o;
index++;
} while (index<100);
is.close();
} catch (Exception ex) {
anzahlObjekte = index;
}
return objektFeld;
}
static void neueObjekte() {
String s;
do {
System.out.print("Ein Datensatz bitte (Ende mit
x): ");
s = Eingabe.next();
if (!s.equals("x")) {
objektFeld[anzahlObjekte] = new
MeineKlasse();
objektFeld[anzahlObjekte].setEinAttribut(s);
anzahlObjekte++;
}
} while (!s.equals("x"));
}
static void zeigeObjekte() {
if (anzahlObjekte==0) {
System.out.println("Nichts anzuzeigen\n");
} else {
for (int n=0; n<anzahlObjekte; n++)
System.out.println(objektFeld[n].getEinAttribut());
System.out.println();
}
}
static void löscheObjekte() {
System.out.print("Daten wirklich löschen j/n ?");
Scanner Eingabe = new Scanner(System.in);
String antwort = Eingabe.next();
if (antwort.equals("j")) {
for (int n=0; n<anzahlObjekte; n++) objektFeld[n]=null;
anzahlObjekte=0;
System.out.println("Daten gelöscht\n");
}
}
public static void main(String[]args) {
System.out.println("Datensatzverwaltung\n");
Scanner Eingabe = new Scanner(System.in);
String antwort;
do {
System.out.print("1 neu 2 speichern 3 einlesen 4
anzeigen 5 löschen x Ende : ");
antwort = Eingabe.next();
if (antwort.equals("1")) neueObejkte();
if (antwort.equals("2")) schreibeObjekte(objektFeld);
if (antwort.equals("3")) objektFeld=liesObjekte();
if (antwort.equals("4")) zeigeObjekte();
if (antwort.equals("5")) löscheObjekte();
} while (!antwort.equals("x"));
}
}
Aufgaben: