Letzter Versuch zum ändern

Status
Nicht offen für weitere Antworten.

mobile

Bekanntes Mitglied
Hi,

sitze hier nun seit mehreren Stunden und dicken Büchern, aber ich komme einfach nicht weiter. Beschreibe noch mal kurz alles.

Ich lese 20 Objekte der Klasse Disc ein und packe sie in die ArrayList liste.

Code:
//...
public ArrayList liste = new ArrayList();

//...

try {	
			for(byte i = 1; i <= MAX_TRACK ; i++) {	 
		 	    System.out.println("Track    : " + i);
				    
		 	    System.out.print("Interpret: ");
				String interpret = din.readLine();
				    
				System.out.print("Titel    : ");
				String titel = din.readLine();
						     
				System.out.print("Dauer    : ");
				String dauer = din.readLine();
				   			    
				System.out.println();
				
				//Neues Object von Disc wird angelegt und in Liste gepseichert
				Disc disc = new Disc(i, interpret, titel, dauer);
				liste.add(disc);
			}
//...

Dann bau ich mir einen Namen zusammen und unter diesem Namen wird die Liste dann serialisiert. Also habe ich jetzt ein Object in meiner Liste namens Disc_1.ser. Das ist dann für immer verfügbar, funktioniert alles pima auch mit mehreren Objekten (Disc_2.ser) usw.

Code:
//Liste wird serialisiert
				try {
					//Name für die List wird gebildet
					String listname = "Disc_";
					listname += String.valueOf(this.akMdnr);
					listname += ".ser";
			    
					FileOutputStream fs = new FileOutputStream(listname);
					ObjectOutputStream os = new ObjectOutputStream(fs);
					os.writeObject(liste);
				    os.close();
				}

Nun ist mein einziges Problem, was ich noch habe, dass man einzellne Objekte vom Typ Disc ja auch mal ändern muss. Sei es einfaach nur, weil man sich verschrieben hat. So kurz was ich vor habe:

Möchte zB Disc_2.ser öffnen und zB das 4 Element in der Liste ändern. Hab das jetzt so gemacht. Erst hab ich das Element gelöscht (geht super) und dann wollte ich es mit der dieser Methode wieder neu einlesen und dann an den alten Platz speichern, dass geht leider nicht.

Code:
public void reMake(byte track, String listname) {		
		//Neues Objekt wird erstellt
		try {	
			System.out.println("Track    : " + track);
				    
		 	System.out.print("Interpret: ");
			String interpret = din.readLine();
				    
			System.out.print("Titel    : ");
			String titel = din.readLine();
						     
			System.out.print("Dauer    : ");
			String dauer = din.readLine();
				   			    
			System.out.println();
				
			//Neues Object von Disc wird angelegt und in Liste gespeichert
			Disc newTrack = new Disc(track, interpret, titel, dauer);
			liste.set((track - 1), newTrack);	
			
			//Liste wo eingefügt werden soll wird geöffnet
			FileOutputStream fs = new FileOutputStream(listname);
			ObjectOutputStream os = new ObjectOutputStream(fs);
			os.writeObject(liste);
		    os.close();
		}
		catch(IOException e) {
			System.out.println("***Fehler beim Speichern***");
		}		
	}

Das Element wird wie schon gesag einfach nur gelöscht und dass Objekt was ich mit reMake wieder erstelle wird nicht gespeichert.

Hoffe, ihr könnt mir helfen!!!

Danke!
 
Das heisst, das Objekt wird korrekt serialisiert (am Ende der reMake-Methode), aber ohne das neue Objekt?

Übrigens: Warum heisst deine Klasse Disc nicht Track? ; )
 
richtig genau so ist es. Weiß nicht hab ich eben Disc genannt... egal...
 
Möchte zB Disc_2.ser öffnen und zB das 4 Element in der Liste ändern. Hab das jetzt so gemacht. Erst hab ich das Element gelöscht (geht super) und dann wollte ich es mit der dieser Methode wieder neu einlesen und dann an den alten Platz speichern, dass geht leider nicht.
Du brauchst das Element nicht erst löschen und dann wieder einfügen.
Du holst es Dir einfach und änderst es. Es wird dann auch in der Liste geändert, weil in der Liste eh nur Referenzen zu Deinem Objekt stehen.
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben