Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
ich versuche selbst definierte Objekte in einer Datei zu speichern... ich meine auch, dass das funktioniert. Die Datei wird immer größer... und wenn ich die Datei anschaue (habe sie als 'xyx.txt' gespeichert) - tauchen meine Einträge zwischen den verschiedenen 'wirren' Zeichen auch auf.
1.) Kann man Objekte falsch speichern? Oder kann man sagen, wenn man sie gespeichert bekommt, dass man sie auch lesen kann?
So... dann zu 2.)... oder lese ich die Objekte falsch aus? Hier mal mein Code:
Code:
public class Mitarbeiter implements Serializable {
public Mitarbeiter() {
FileInputStream fis = null;
ObjectInputStream ois = null;
private ArrayList<Mitarbeiter> mas = new ArrayList<Mitarbeiter>();
private ArrayList<String> mitarbeiterListeAuswahl = new ArrayList<String>();
Mitarbeiter mitarbeiter;
int i = 0;
try {
fis = new FileInputStream(dateinameMitarbeiter.txt);
ois = new ObjectInputStream(fis);
mas = (ArrayList<Mitarbeiter>) ois.readObject();
ois.close();
fis.close();
Iterator<Mitarbeiter> arraylistIT = mas.iterator();
while (arraylistIT.hasNext()) {
mitarbeiter = mas.get(i);
mitarbeiterListeAuswahl.add(mitarbeiter.getName());
String test1 = mitarbeiterListeAuswahl.get(i);
System.out.println(test1);
arraylistIT.next();
i++;
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
Bei mir kommt dann immer nur der Eintrag an Index-Stelle null (also mas.get(0))... wenn ich da hinschreibe mas.get(1) (also 'hart' in den Code - ohne Variable) kommt eine OutOfBounds Fehlermeldung... somit wird nicht mehr als ein Objekt eingelesen, oder (was mich wieder zu meiner ersten Frage führt...)?
Danke für die Antwort - habe es jetzt auch umgestellt.
Leider funktioniert es immer noch nicht. Das Ergebnis ist noch das selbe.
Code:
public class Mitarbeiter implements Serializable {
public Mitarbeiter() {
FileInputStream fis = null;
ObjectInputStream ois = null;
private ArrayList<Mitarbeiter> mas = new ArrayList<Mitarbeiter>();
private ArrayList<String> mitarbeiterListeAuswahl = new ArrayList<String>();
Mitarbeiter mitarbeiter;
int i = 0;
try {
fis = new FileInputStream(dateinameMitarbeiter.txt);
ois = new ObjectInputStream(fis);
mas = (ArrayList<Mitarbeiter>) ois.readObject();
ois.close();
fis.close();
Iterator<Mitarbeiter> arraylistIT = mas.iterator();
while (arraylistIT.hasNext()) {
Mitarbeiter mitarbeiter = (Mitarbeiter) arraylistIT.next();
mitarbeiterListeAuswahl.add(mitarbeiter.getName());
String test1 = mitarbeiterListeAuswahl.get(i);
System.out.println(test1);
arraylistIT.next();
i++;
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
Meine 'mitarbeiterListeAuswahl' enthält immer noch nur ein Wert. Lass mir den Größe von 'mitarbeiterListeAuswahl' über 'mitarbeiterListeAuswahl.size()' ausgeben.
Die Anweisung "while (arraylistIT.hasNext())" kann doch als ganz normale Schleife angesehen werden, oder?
Ich habe irgendwie das Gefühl, dass in 'mas' gar nicht alle Objekte enthalten sind.
Erstelle doch mal ein kleines ausführbares Beispiel, was man sich hier kopieren und bei sich einfügen kann, um das nachzuvollziehen. Wir wissen ja gar nicht, wie Du die Objekte schreibst.
public void mitarbeiterHinzufuegen(Mitarbeiter mitarbeiter) {
mitarbeiterListe.add(mitarbeiter);
FileOutputStream fos = null;
ObjectOutputStream oos = null;
try {
fos = new FileOutputStream(dateinameMitarbeiter.txt);
oos = new ObjectOutputStream(fos);
oos.writeUnshared(mitarbeiterListe);
oos.close();
fos.close();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
Ein Mitarbeiter hat zum Beispiel einen Namen ('String name')... der zuerst zugewissen wird. Und dann wird das Mitarbeiterobjekt der Methode 'mitarbeiterHinzufuegen()' übergeben.
EDIT:
Die 'mitarbeiterListe' ist ebenfalls eine ArrayListe, die Mitarbeiter enthält.
=>
Code:
private ArrayList<Mitarbeiter> mitarbeiterListe = new ArrayList<Mitarbeiter>();
Wird das dann (so wie ich es geschrieben habe) als 'ArrayListe' angelegt und ich bekomme das deshalb nicht heraus?
Hatte was falsch verstanden, aber das Rausschreiben/Einlesen geht bei mir (JA, der Code ist furchtbar...aber ich hatte keine Lust alles neu zu schreiben...)