Problem mit ObjectInput- und ObjectOutputStream

Status
Nicht offen für weitere Antworten.

wicky

Mitglied
tach zusammen,
mein problem ist das ich eine liste mit einem ObjectOutputStream speichern will und beim start meines programms muß diese liste wieder geladen werden. nur das funktioniert nicht und ich hab keine ahnung mehr warum es nicht funktioniert. hier der Code dazu.

Meine MainKlasse
Code:
public class ShoppingMain {

	public static void main(String[] args) {
	
	int eingabeInt = 0;
	String filename = "c:/streams/test.dat";
	ShoppingListeSpeichern speichern = new ShoppingListeSpeichern();
	ShoppingEingabe eingabe = new ShoppingEingabe();
	ShoppingListNeu liste = new ShoppingListNeu();
	try{
		liste.arrayListe = speichern.deserialize(filename);
	}
	catch(Exception e) {
		System.out.println("Noch keine Liste zum laden Vorhanden!");
	} finally {
		liste = new ShoppingListNeu();
	}
	
	System.out.println("Was wollen sie tun?");
	System.out.println("~~~~~~~~~~~~~~~~~~~");
	System.out.println();
	System.out.println("(1) Einen Artikel hinzufügen");
	System.out.println("(2) löschen mit index");
	System.out.println("(3) löschen mit Artikelname");
	System.out.println("(4) alle anzeigen");
	System.out.println("(5) speichern");
	System.out.println();
	System.out.println("(9) beenden");
	
	do {
		
		System.out.println();
		System.out.print("bitte wählen: ");

		eingabeInt =  eingabe.leseIntVonEingabe();
		
		switch (eingabeInt) {
		
 		case 1: 
				System.out.println("Bitte geben Sie Artikel und Menge ein.");
				System.out.print("Artikel:");
				
				ShoppingElement shoppingElement = new ShoppingElement();
				
				shoppingElement.setArtikelname( eingabe.leseZeileVonEingabe() );
				System.out.println();
				System.out.print("Menge:");
				shoppingElement.setMenge ( eingabe.leseIntVonEingabe());
				System.out.println();
				liste.artikelInListeAufnehmen(shoppingElement);
				System.out.println("Artikel wurde in Liste aufgenommen.");
				break;
		
		case 2: 
				System.out.println("Bitte die Zahl des zu löschenden 
				Artikels eingeben");
				int elementLoeschen  = eingabe.leseIntVonEingabe();
				liste.artikelAusListeLoeschen(elementLoeschen);
				System.out.println("Eintrag an Stelle " + elementLoeschen 
				+ " gelöscht" );
				break;
			
		case 3: 
				System.out.println("Bitte den zu löschenden Artikel korekt
				 geschrieben eintragen");
				String stringEllement = eingabe.leseZeileVonEingabe();
				liste.artikelAusListeLoeschen(stringEllement);	
				System.out.println("Es wurde der Artikel " + stringEllement 
				+ " gelöscht" );					
				break;
		 		
				
		case 4:                     ShoppingElement[] alleEllemente = 
				new ShoppingElement[liste.getArtikelAnzahl()];
		                                alleEllemente =  liste.alleArtikelZurueckgeben();

		                                for (int i = 0; i < liste.getArtikelAnzahl(); i++) {
		        	                     ShoppingElement aktuellesShoppingElement =  alleEllemente[i];
		        	                        System.out.println( i + 1 + "/"  + "Artikel: " 
		        	                        + aktuellesShoppingElement.getArtikelName() + " - " 
		        		            + "Menge: " + aktuellesShoppingElement.getMenge());
                                                                 } 	
				break;
			
		case 5:			
			    speichern.serialize(filename);
			    System.out.println("Die Liste wurde gespeichert.");
				break;
				
		case 9:	
				System.out.println("	beenden");
				break;

		case -1:
				System.out.println("Bitte korrekte Zahl eingeben!");
				break;
			
		default:
				System.out.println("Menuezahl nicht vorhanden!				Bitte korrekt eingeben!");	
				break;
		}
	}
	while ( eingabeInt != 9);
		
	}
}

Hier meine Klasse in der die Liste verwaltet wird

Code:
public class ShoppingListNeu  {
	
	
		public ArrayList arrayListe = new ArrayList();

		public void artikelInListeAufnehmen(ShoppingElement gelesenesElement) {
	
			arrayListe.add(gelesenesElement);
		}

	
		public void artikelAusListeLoeschen(String element) {

				for (int i = 0; i < getArtikelAnzahl(); i++){
					
					ShoppingElement shoppingElement = (ShoppingElement)      
                                                                                                                                              arrayListe.get(i);
					
					if (element.equals( shoppingElement.getArtikelName() ) ) {
						arrayListe.remove(i);
					}
				}
		}		


		public void artikelAusListeLoeschen( int index){

			arrayListe.remove( index);
		}
		
	
		public ShoppingElement[] alleArtikelZurueckgeben() {
			
			ShoppingElement[] alleElemente = new ShoppingElement[arrayListe.size()];
			
			arrayListe.toArray(alleElemente);

			return alleElemente;
		}
		
	
		public int getArtikelAnzahl() {
		
			int artikelAnzahl = arrayListe.size();
			return artikelAnzahl;
		}
}

hier meine klasse zum speichern
Code:
public class ShoppingListeSpeichern {
	
	ShoppingListNeu liste = new ShoppingListNeu();
	
	  public void serialize( String filename )
	  {
	    try
	    {
	      FileOutputStream file = new FileOutputStream( filename );
	      ObjectOutputStream outPut = new ObjectOutputStream( file );
	      outPut.writeObject( liste.arrayListe );

	      outPut.close();
	    }
	    catch ( IOException e ) { System.err.println( e ); }
	  }
	  
	  
	  
	  public ArrayList deserialize( String filename ) throws Exception
	  {
	  	ArrayList alleElemente = null;
	    try
	    {
	      FileInputStream file = new FileInputStream( filename );
	      ObjectInputStream inPut = new ObjectInputStream( file );
	      	   
	      alleElemente = (ArrayList) inPut.readObject();
	      inPut.close();

	    }
	    catch ( IOException e ) { throw new Exception( e ); }
	    catch ( ClassNotFoundException e ) { throw new Exception( e ); }
	    return alleElemente;
	  }
}

vielleicht kann mir ja jemand helfen. im voraus schon mal vielen dank.
greetz wicky

ps:entschuldigt das mit dem einrücken. mach ich normal ganz sauber aber wenn ich das hier rein paste zerreißt es mir den kompletten code war so schon fett arbeit.
 
B

bygones

Gast
es ist immer gut zu schreiben - was nicht klappt... sonst wirds mit dem helfen schwierig...
und gib dir bei allen deinen catch(Exception e) mal den stackTrace aus:
Code:
catch(Exception e) {
e.printStackTrace();
}
dann sagt dir java was das problem ist !
 

wicky

Mitglied
es gibt keine fehlermeldung und wenn ich meine liste ausgebe nachdem ich das programm neu starte kommt einfach nichts. wie wenn ich nie etwas gespeichert habe. aber ich versuch jetzt einfach mal das mit der ausgabe der stack traces.
 
B

bygones

Gast
wicky hat gesagt.:
na ja komm nicht wirklich weiter.
hast du in allen exceptions einen stracktrace gemacht ?
klappt das speichern schon nicht oder das auslesen ?
die Elemente die in der ArrayList sind, implementieren die das Serializable interface ??

PS:
Code:
       catch ( IOException e ) { throw new Exception( e ); }
       catch ( ClassNotFoundException e ) { throw new Exception( e ); }
das ist nicht sinnvoll - schmeiß doch gleich die Exceptions die auch kommen... außerdem ist es nicht sehr gut
Code:
catch(Exception e)
besser ist die Exception einzeln zu fangen....
 

wicky

Mitglied
ist ja klar das er nichts einlesen kann. in meiner klasse zum speichern hab ich gleich am anfang (ShoppingListNeu liste = new ShoppingListNeu();) angelegt. somit ist die liste immer neu und natürlich leer also das mit dem auslesen in eine datei geht jetzt schon mal. jetz muß nur noch eingelesen werden.
 

meez

Top Contributor
wicky hat gesagt.:
ist ja klar das er nichts einlesen kann. in meiner klasse zum speichern hab ich gleich am anfang (ShoppingListNeu liste = new ShoppingListNeu();) angelegt. somit ist die liste immer neu und natürlich leer also das mit dem auslesen in eine datei geht jetzt schon mal. jetz muß nur noch eingelesen werden.

Schreiben kann ers schon...Nur steht halt nichts drin...
 

wicky

Mitglied
wenn ich meine main so abändere

Code:
try{
			liste.setArrayList(speichern.deserialize(filename));
			System.out.println("Liste vom Dateisystem geladen! (" + liste.getArrayList().size() + " Einträge)");
		}
		catch(Exception e) {
			System.out.println("Noch keine Liste zum laden Vorhanden!");
		} finally {
			liste = new ShoppingListNeu();
		}
sehe ich doch ob etwas drin steht und es sind immer genau soviele einträge drin wie ich schreibe:). nur das einlesen geht halt nicht.
 

Reality

Top Contributor
Kannst du nun auslesen oder nicht?
In der PN hast du gesagt, dass es geht.
Würde mich auch interessieren, wie man so viele Objekte auslesen kann wie man will.

Liebe Grüße
Reality
 

wicky

Mitglied
@reality!!! wie gesagt der code! jetzt funktioniert er:-0


mainKlasse

Code:
public class ShoppingMain {

	public static void main(String[] args) {
		
		int eingabeInt = 0;
		String filename = "c:/streams/test.dat";
		ShoppingListeSpeichern speichern = new ShoppingListeSpeichern();
		ShoppingEingabe eingabe = new ShoppingEingabe();
		ShoppingListNeu liste = new ShoppingListNeu();
		
		try{
			liste.setArrayList(speichern.deserialize(filename));
			System.out.println("Liste vom Dateisystem geladen!");
		}
		catch(Exception e) {
			System.out.println("Noch keine Liste zum laden Vorhanden!");
		}
		
		
		System.out.println("Was wollen sie tun?");
		System.out.println("~~~~~~~~~~~~~~~~~~~");
		System.out.println();
		System.out.println("(1) Einen Artikel hinzufügen");
		System.out.println("(2) löschen mit index");
		System.out.println("(3) löschen mit Artikelname");
		System.out.println("(4) alle anzeigen");
		System.out.println("(5) speichern");
		System.out.println();
		System.out.println("(9) beenden");
		
		do {
			
			System.out.println();
			System.out.print("bitte wählen: ");

			eingabeInt =  eingabe.leseIntVonEingabe();
			
			switch (eingabeInt) {
			
     		case 1: 
			System.out.println("Bitte geben Sie Artikel und Menge ein.");
			System.out.print("Artikel:");
					
			ShoppingElement shoppingElement = new ShoppingElement();
					
			shoppingElement.setArtikelname( eingabe.leseZeileVonEingabe() );
			System.out.println();
			System.out.print("Menge:");
			shoppingElement.setMenge ( eingabe.leseIntVonEingabe());
			System.out.println();
			liste.artikelInListeAufnehmen(shoppingElement);
			System.out.println("Artikel wurde in Liste aufgenommen.");
			break;
			
		case 2: 
			System.out.println("Bitte die Zahl des zu löschenden
					 Artikels eingeben");
			int elementLoeschen  = eingabe.leseIntVonEingabe();
		                liste.artikelAusListeLoeschen(elementLoeschen);
			System.out.println("Eintrag an Stelle " + elementLoeschen + " gelöscht" );
			break;
				
		case 3: 
			System.out.println("Bitte den zu löschenden Artikel korekt geschrieben eintragen");
			String stringEllement = eingabe.leseZeileVonEingabe();
			liste.artikelAusListeLoeschen(stringEllement);	
			System.out.println("Es wurde der Artikel " + stringEllement + " gelöscht" );	
                                                break;
			 		
					
		case 4:     ShoppingElement[] alleEllemente = new ShoppingElement[liste.getArtikelAnzahl()];
			alleEllemente =  liste.alleArtikelZurueckgeben();

			 for (int i = 0; i < liste.getArtikelAnzahl;i++) (                                                           ShoppingElementaktuellesShoppingElement = alleEllemente[i];
			             System.out.println( i + 1 + "/"  + "Artikel: " + 
			              aktuellesShoppingElement.getArtikelName() + " - " + "Menge: "+ +                                                           aktuellesShoppingElement.getMenge());} 	
    			             break;
				
		case 5:			
		                speichern.serialize(filename, liste);
		                System.out.println("Die Liste wurde gespeichert.");
			break;
					
		case 9:	
			 System.out.println("beenden");
				break;

		case -1:
		                 System.out.println("Bitte korrekte Zahl eingeben!");
			  break;
				
		default:
			System.out.println("Menuezahl nicht vorhanden! Bitte korrekt eingeben!");	
			break;
			}
		}
		while ( eingabeInt != 9);
		
	}
}


klasse zum speichern

Code:
public class ShoppingListeSpeichern {
	
	
	  public void serialize( String filename, ShoppingListNeu liste )
	  {
	    try
	    {
	      FileOutputStream file = new FileOutputStream( filename );
	      ObjectOutputStream outPut = new ObjectOutputStream( file );
	      outPut.writeObject( liste.getArrayList() );
	      outPut.flush();
	      outPut.close();
	    }
	    catch ( IOException e ) { System.err.println( e ); }
	  }
	  
	  
	  
	  public ArrayList deserialize( String filename ) throws Exception
	  {
	  	ArrayList alleElemente = null;
	    try
	    {
	      FileInputStream file = new FileInputStream( filename );
	      ObjectInputStream inPut = new ObjectInputStream( file );
	      	   
	      alleElemente = (ArrayList) inPut.readObject();
	      inPut.close();
	      
	    }
	    catch ( IOException e ) { throw new Exception( e ) ; }
	    catch ( ClassNotFoundException e ) { throw new Exception( e ); }
	    
	    return alleElemente;
	  }
}


klasse liste

Code:
public class ShoppingListNeu  {
	
	
		public ArrayList arrayListe = new ArrayList();
		
	
		public void artikelInListeAufnehmen(ShoppingElement gelesenesElement) {
	
			arrayListe.add(gelesenesElement);
		}

	
		public void artikelAusListeLoeschen(String element) {

				for (int i = 0; i < getArtikelAnzahl(); i++){
					
				ShoppingElement shoppingElement = (ShoppingElement)arrayListe.get(i);
					
					if (element.equals( shoppingElement.getArtikelName() ) ) {
						arrayListe.remove(i);
					}
				}
		}		

		public void artikelAusListeLoeschen( int index){

			arrayListe.remove( index);
		}
		
		public ShoppingElement[] alleArtikelZurueckgeben() {
			
			ShoppingElement[] alleElemente = new ShoppingElement[arrayListe.size()];
			
			arrayListe.toArray(alleElemente);

			return alleElemente;
		}
		
		public ArrayList getArrayList() {
			return arrayListe;
		}
		
		public void setArrayList(ArrayList arrayListe) {
			this.arrayListe = arrayListe;
		}
		
		public int getArtikelAnzahl() {
		
			int artikelAnzahl = arrayListe.size();
			return artikelAnzahl;
		}
}


greetz wicky

ps:sorry das es mir den code so zerreißt aber kein plan warum!
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
K Verständnis Problem bei Server/Client Java Basics - Anfänger-Themen 2
I WildFily - unterschiedliche Libs im Projekt verursachen Problem Java Basics - Anfänger-Themen 11
imocode Vererbung Problem mit Vererbung Java Basics - Anfänger-Themen 2
L Taschenrechner Problem Java Basics - Anfänger-Themen 4
I Applikationsserver (WildFly) - Zugriff auf Ressourcen.. Problem mit Pfade Java Basics - Anfänger-Themen 10
A ScheduledExecutorService problem Java Basics - Anfänger-Themen 7
marcelnedza Problem mit Weltzuweisung, JavaKarol Java Basics - Anfänger-Themen 13
XWing Methoden rückgabe Problem? Java Basics - Anfänger-Themen 6
M Erste Schritte Collatz Problem max int Java Basics - Anfänger-Themen 3
M Problem bei verschachtelter for-Schleife bei zweidimensionalen Arrays Java Basics - Anfänger-Themen 3
C GLOOP Problem beim Erstellen der Kamera Java Basics - Anfänger-Themen 9
nelsonmandela Problem bei Ausgabe einer Switch - Case Funktion Java Basics - Anfänger-Themen 5
frager2345 Problem mit Methode Java Basics - Anfänger-Themen 4
L Problem bei Rechnung mit Math.pow Java Basics - Anfänger-Themen 13
A Thread-Schreibe-Lese-Problem Java Basics - Anfänger-Themen 4
SUPERTJB return Problem Java Basics - Anfänger-Themen 3
sserio BigInteger Problem Java Basics - Anfänger-Themen 4
JordenJost Taschenrechner problem Java Basics - Anfänger-Themen 5
K Problem mit "Random" Java Basics - Anfänger-Themen 5
S Datei anlegen Problem! Groß- und Kleinschreibung wird nicht unterschieden Java Basics - Anfänger-Themen 4
sserio Problem beim Anzeigen Java Basics - Anfänger-Themen 5
xanxk Problem For-Schleife mit Charakter Java Basics - Anfänger-Themen 2
L Unbekanntes Problem mit 2d Array Java Basics - Anfänger-Themen 6
sserio Liste erstellt und ein Problem mit dem Index Java Basics - Anfänger-Themen 8
sserio Schwimmen als Spiel. Problem mit to String/ generate a card Java Basics - Anfänger-Themen 4
J Schleife Problem Java Basics - Anfänger-Themen 2
D Problem mit der Erkennung von \n Java Basics - Anfänger-Themen 2
milan123 das ist meine aufgabe ich hab das problem das bei mir Wenn ich die Richtung der Linien verändern will und drei davon sind richtig, verändere ich die 4 Java Basics - Anfänger-Themen 3
M Verständins Problem bei Aufgabe Java Basics - Anfänger-Themen 4
HeiTim Problem mit der Kommasetzung an der richtigen stelle Java Basics - Anfänger-Themen 59
Temsky34 Problem mit dem Code Java Basics - Anfänger-Themen 17
P Problem mit Calendar.getDisplayName() Java Basics - Anfänger-Themen 8
C Problem mit mehreren Methoden + Scanner Java Basics - Anfänger-Themen 5
P Datei einlesen, nach Begriff filtern und in Datei ausgeben. Problem Standardausgabe über Konsole Java Basics - Anfänger-Themen 19
M Problem mit Klassenverständnis und Button Java Basics - Anfänger-Themen 8
EchtKeineAhnungManchmal hallo habe ein Problem mit einer Datei -> (Zugriff verweigert) Java Basics - Anfänger-Themen 4
H Problem mit Verzweigungen Java Basics - Anfänger-Themen 6
H Problem mit Rückgabewert Java Basics - Anfänger-Themen 7
josfe1234 JAVA FX problem Java Basics - Anfänger-Themen 3
A Code Problem Java Basics - Anfänger-Themen 6
Henri Problem von Typen Java Basics - Anfänger-Themen 7
J Problem mit "ArrayIndexOutOfBoundsException" Java Basics - Anfänger-Themen 11
K jackson Mapping - Problem mit Zeitzonen Java Basics - Anfänger-Themen 10
B Threads Problem mit mehreren Threads Java Basics - Anfänger-Themen 38
I Output BigDecimal anstatt double / Problem beim Rechnen Java Basics - Anfänger-Themen 16
D Schleifen Problem Java Basics - Anfänger-Themen 2
H So viele Fehlermeldungen, dass ich nicht weiß wo das Problem ist. Java Basics - Anfänger-Themen 6
J JAVA-Problem blockiert MEDIATHEKVIEW Java Basics - Anfänger-Themen 13
T Problem mit Lehrzeichen und String bei einfacher Chiffre Java Basics - Anfänger-Themen 8
J extends Problem Java Basics - Anfänger-Themen 2
C Polymorphie-Problem Java Basics - Anfänger-Themen 3
Kalibru Problem bei Ausgabe von Objekt Java Basics - Anfänger-Themen 1
I Format Problem mit Wert - bekomme 0,10 anstatt 10,00 Java Basics - Anfänger-Themen 6
J Problem mit einer Methode die gewissen Inhalt einer Array löschen soll Java Basics - Anfänger-Themen 9
J Problem mit einer Methode, die beliebig viele Objekte in Array speichern soll Java Basics - Anfänger-Themen 6
J Allgemeines Problem mit Klassen Java Basics - Anfänger-Themen 5
U Problem mit dem initialisieren meines Strings in einer Schleife Java Basics - Anfänger-Themen 5
amgadalghabra algorithmisches Problem Java Basics - Anfänger-Themen 19
J Traveling Salesman Problem [Arrays] Java Basics - Anfänger-Themen 9
R ArrayList Problem Java Basics - Anfänger-Themen 6
InfinityDE Problem mit Datenübergabe an Konstruktor Java Basics - Anfänger-Themen 7
C RegEx Problem Java Basics - Anfänger-Themen 4
J Anfänger TicTacToe, Problem bei Gewinnoption, sowohl Unentschieden Java Basics - Anfänger-Themen 8
E Taschenrechner GUI Problem mit Fehlerhandling Java Basics - Anfänger-Themen 6
M Input/Output Fallunterscheidung Problem Java Basics - Anfänger-Themen 17
P Problem beim Überschreiben einer vererbten Methode Java Basics - Anfänger-Themen 4
M Problem bei Ausgabe Java Basics - Anfänger-Themen 7
Splayfer Java Array Problem... Java Basics - Anfänger-Themen 2
G Problem bei der Ausgabe einer Main Claase Java Basics - Anfänger-Themen 7
F Problem mit KeyListener in kombination mit dem ActionListener Java Basics - Anfänger-Themen 4
G Subset sum problem mit Backtracking Java Basics - Anfänger-Themen 18
N Problem mit Scanner Java Basics - Anfänger-Themen 2
J Klassen Problem Java Basics - Anfänger-Themen 8
A Out.format problem. Java Basics - Anfänger-Themen 3
J Problem bei der Programmierung eines Tannenbaums Java Basics - Anfänger-Themen 9
A Array problem Java Basics - Anfänger-Themen 16
2 Taschenrechner mit GUI Problem bei der Berechnung Java Basics - Anfänger-Themen 8
W Remote Method Invocation RMI - Problem Java Basics - Anfänger-Themen 0
I Ich habe ein Problem Java Basics - Anfänger-Themen 3
A Problem bei returnen eines Wertes Java Basics - Anfänger-Themen 6
M Regex Erstellung Problem Java Basics - Anfänger-Themen 2
D Input/Output Problem bei der Benutzereingabe eines Befehls Java Basics - Anfänger-Themen 14
M (Sehr großes Problem) Listen als static in anderen Klassen verwendet Java Basics - Anfänger-Themen 12
F Habe ein problem mit dem ActionListener Java Basics - Anfänger-Themen 3
C Regex-Problem Java Basics - Anfänger-Themen 4
J Problem beim vergleich von zwei Integer Java Basics - Anfänger-Themen 3
M Problem in der Modellierung Java Basics - Anfänger-Themen 20
W Wo ist das URL-Problem ? Java Basics - Anfänger-Themen 1
S Generics-Problem: Class, Class<?>, Class<Object> Java Basics - Anfänger-Themen 4
D FileWriter / FileReader Problem Java Basics - Anfänger-Themen 10
G Problem beim Speichern von Objekten in einer Datei Java Basics - Anfänger-Themen 7
S Compiler-Fehler Exception in thread "main" java.lang.Error: Unresolved compilation problem: Java Basics - Anfänger-Themen 6
J Problem mit Array: 2 Klassen Java Basics - Anfänger-Themen 2
S Collections funktionale Listen (ListNode<E>) review und problem beim clone Java Basics - Anfänger-Themen 0
W OOP Vererbung und Problem bei Zählschleife in einer Methode Java Basics - Anfänger-Themen 10
C Problem mit If Else If und Überprüfung eines Counters Java Basics - Anfänger-Themen 3
F Problem mit Listen Java Basics - Anfänger-Themen 5
I wieder mit einer Umwandelung habe ich Problem (diesmal von char Array zu char) Java Basics - Anfänger-Themen 1
J Problem bei Umrechnung von Hex in Bin Java Basics - Anfänger-Themen 4
W Problem bei Programmierung von Monte-Carlo-Integration Java Basics - Anfänger-Themen 12

Ähnliche Java Themen

Neue Themen


Oben