ObjectArray Speichern und laden

Status
Nicht offen für weitere Antworten.

kanuddel

Mitglied
hallo, ich habe ein Array vom Typ Fach, also
Java:
 Fach[] faecher
nun wird im laufe des Programms das Array mit objekten vom typ Fach gefüllt... soweit so gut.

Nun möchte ich das ganze in eine Datei speichern und wieder laden können.
Hab das mit FileOutputStream und ObjectOutputStream, sowie die Input-versionen davon versucht zu lösen.
Für das Output sieht das wie folgt aus:
Java:
private static void speichern(){
		try{
			fos_ref = new FileOutputStream (".\\notensave");
			oos_ref = new ObjectOutputStream(fos_ref);
			try {
				oos_ref.writeObject(faecher);
			} //endtry
			catch  (Exception exception_ref) {
				System.out.println("Exception: "+exception_ref.getClass().getName());
			} // endcatch
			oos_ref.close();
			fos_ref.close();
		} //endtry
		catch (Exception exception_ref) {
			System.out.println("Exception: "+exception_ref.getClass().getName());
			System.exit(-1);
		} //endcatch
	} //endmethod speichern
Java gibt mir eine java.io.NotSerializableException aus. Damit kann ich herzlich wenig anfangen. Java erstellt mir aber eine Datei "notensave", in der totaler Kauderwelch steht. Neben lauter sonderzeichen auch texte die ausgegeben wurden (z.b. hauptmenü-teile des Programms) und so..

Muss ich vielleicht jeden Teil des Arrays einzeln übertragen? Also mit ner for schleife erst faecher[0], dann faecher[1] usw? Weil im Momant übertrage ich ja einfach nur "faecher". Aber das was in der Datei steht ist mir zu schleierhaft..

Hat von euch zufällig jemand eine Idee für mich?

Gruß
kanuddel
 
Ich vermute mal, dass deine Klasse Fach das Interface Serializable nicht implementiert. Entsprechend können Objekte dieses Typs nicht in einen ObjectOutputStream geschrieben werden.
 
das ist richtig..
ich hab nun aus
Java:
public class Fach{
// ...
folgendes gemacht:
Java:
import java.io.Serializable;
public class Fach implements Serializable{
// ...
Nun unterstreicht eclipse mir "Fach" und meint, ich brauch ne static final ID ?? aknnst du mir das erklären, was es damit auf sich hat?


Gruß
kanuddel

edit: programm läuft, und in der datei steht nun wesentlich weniger drin...
ob es geklappt hat weiss ich aber noch nciht, da ich erstmal die lade-metode schreiben muss..
 
Zuletzt bearbeitet:
Danke für den link.
ALso meine Fach.class hat mit dem beispiel bestens übereingestimmt:
Java:
import java.io.Serializable;

public class Fach implements Serializable{

	private String name;
	private double note;
	private int cp;

	public Fach(){
		this(null,0,0);
	}
	
	public Fach (String name,double note,int cp){
		this.name = name;
		this.note = note;
		this.cp = cp;
	}

	public void setName(String name){
		this.name = name;
	}
	public void setNote(double note){
		this.note = note;
	}
	public void setCp(int cp){
		this.cp = cp;
	}
	public String getName(){
		return name;
	}
	public double getNote(){
		return note;
	}
	public int getCp(){
		return cp;
	}
}
hier die speichern und laden methoden:
Java:
	static FileOutputStream fos_ref = null;
	static ObjectOutputStream oos_ref = null;
	static FileInputStream fis_ref = null;
	static ObjectInputStream ois_ref = null;
	static Object object_ref;
// ...
// ...
	private static void speichern(){
		try{
			fos_ref = new FileOutputStream (".\\notensave");
			oos_ref = new ObjectOutputStream(fos_ref);
			try {
				oos_ref.writeObject(faecher[0]);
			} //endtry
			catch  (Exception exception_ref) {
				System.out.println("Exception: "+exception_ref.getClass().getName());
			} // endcatch
			oos_ref.close();
			fos_ref.close();
		} //endtry
		catch (Exception exception_ref) {
			System.out.println("Exception: "+exception_ref.getClass().getName());
			System.exit(-1);
		} //endcatch
	} //endmethod speichern
	
	
	private static void laden(){
		try{
			fis_ref = new FileInputStream(".\\notensave");
			ois_ref = new ObjectInputStream(fis_ref);

			object_ref = ois_ref.readObject();
			if(object_ref instanceof Fach[]){
				faecher[0] = (Fach)ois_ref; // Java kann nciht von ObjectInputStream zu Fach casten...
			} 
			ois_ref.close();
			fis_ref.close();
		} //endtry
		catch (Exception exception_ref){
			System.out.println("Exception: "+exception_ref.getClass().getName());
		} //endcatch
	}

hmm... Java kann nicht von ObjectInputStream zu Fach casten... (Zeile 35)
Aber ich habs doch so gemacht wie im beispiel auch? Ich komm nicht drauf 🙁

Gruß
kanuddel
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben