Hallo!
Ich habe gerade in meinem Java-Buch Serialisierung durchgenommen und wollte mal ein Adressbuch schreiben. Deshalb mein Prinzip: Per Switch-case kann man zwischen drei Optionen wählen.
1) Einfügen
2) Lesen
3) Beenden
Das Serialisieren klappt auch soweit, doch nun möchte ich meine gespeicherten Daten auslesen und dabei haperts noch.
Vorweg: Bin noch Anfänger, also sorry, wenn mein Code vllt etwas kompliziert geschrieben ist.
Hier noch die Klasse speichern
Nun die Klasse Eingabe
Nun zu dem Fehler: Das Eintragen funktioniert soweit, also es wurde beim ersten Mal auf jeden Fall eine foo.ser angelegt.
Wenn ich den Inhalt allerdings auslesen möchte und die Zwei drücke, dann kommt folgender Exceptionfehler:
java.lang.ClassCastException: java.lang.String cannot be cast to adressebuch.Ausgabeasd
at adressebuch.Auswahl.auswaehlen(Adressebuch.java:63)
at adressebuch.Adressebuch.main(Adressebuch.java:95)
Also ich verstehe das so, dass der String nicht in Ausgabeasd übertragen werden kann, nur hilft mir das irgendwie nicht mehr weiter. Programmiere jetzt auch schon gut eine Stunde daran und sehe vielleicht den Wald vor lauter Bäumen nicht mehr :bahnhof:. Deshalb wäre ich für einen Rat sehr dankbar.
Eine andere Sache ist: gehe ich das Adressbuch "richtig" an oder ist meine Art sehr kompliziert?
Und falls mein Adressbuch irgendwann funktionieren sollte, gibt es eine Möglichkeit spezielle Einträge wieder zu löschen? Wonach müsste man googeln, hatte mal gesucht, aber nichts gefunden.
Danke für eure Hilfe
Gruß
Ich habe gerade in meinem Java-Buch Serialisierung durchgenommen und wollte mal ein Adressbuch schreiben. Deshalb mein Prinzip: Per Switch-case kann man zwischen drei Optionen wählen.
1) Einfügen
2) Lesen
3) Beenden
Das Serialisieren klappt auch soweit, doch nun möchte ich meine gespeicherten Daten auslesen und dabei haperts noch.
Vorweg: Bin noch Anfänger, also sorry, wenn mein Code vllt etwas kompliziert geschrieben ist.
Java:
//Main-Klasse
package adressebuch;
import java.io.*;
class Ausgabeasd implements Serializable {
String vorname;
public Ausgabeasd(String v) {
vorname = v;
}
public String getVorname() {
return vorname;
}
}
//Input/Output zur Auswahl der Adressbuchoption
class Lesen {
public int lesen() throws IOException {
BufferedReader in = new BufferedReader(
new InputStreamReader( System.in ) );
String s = in.readLine();
int zahl = Integer.parseInt(s);
return zahl;
}
}
class Auswahl extends Eingabe {
//Aufruf Klasse speichern
Speichern s = new Speichern();
public void auswaehlen(int zahl) throws IOException {
int zahlZwei;
zahlZwei = zahl;
switch(zahlZwei)
{
case 1:
System.out.println("Eintragen"); //Objekt serialisieren
Ausgabeasd ag = new Ausgabeasd(s.speichern());
System.out.println("Erfolgreich eingetragen, geben Sie nun wieder eine Zahl an:");
break;
case 2:
System.out.println("Auslesen");
ag = null; //Steht so in meinem Buch
try {
ObjectInputStream is = new ObjectInputStream(new FileInputStream("foo.ser"));
Ausgabeasd wiederhergestellt = (Ausgabeasd) is.readObject();
System.out.println("asd" + wiederhergestellt.getVorname());
}
catch(Exception ex) {
ex.printStackTrace();
}
//Hier kommt Exceptionfehler, schildere ich weiter unten welcher
break;
case 3:
System.exit(0); break;
default:
System.out.println("Wrong");
}
}
}
public class Adressebuch {
public static void main(String[] args) throws IOException {
int beenden = 0;
Lesen l = new Lesen();
Auswahl a = new Auswahl();
do{
a.auswaehlen(l.lesen());
}
while(beenden == 0);
}
}
Hier noch die Klasse speichern
Java:
package adressebuch;
import java.io.*;
//Klasse Eingabe zeige ich gleich auch noch
public class Speichern extends Eingabe implements Serializable {
Eingabe e = new Eingabe();
String erfolg = "Erfolgreich eingetragen";
public String speichern() throws IOException {
//in Datei foo schreiben
try {
FileOutputStream fs = new FileOutputStream("foo.ser");
ObjectOutputStream os = new ObjectOutputStream(fs);
//Hier wird der Vorname aus der Klasse Eingabe geholt
os.writeObject(e.vorname());
os.close();
}
catch (Exception ex) {
ex.printStackTrace();
}
return erfolg;
}
}
Nun die Klasse Eingabe
Java:
package adressebuch;
import java.io.*;
public class Eingabe {
String vorname;
public String vorname() throws IOException {
BufferedReader in = new BufferedReader(
new InputStreamReader( System.in ) );
String s = in.readLine();
vorname = s;
return vorname;
}
public String getVorname(){
return vorname;
}
}
Nun zu dem Fehler: Das Eintragen funktioniert soweit, also es wurde beim ersten Mal auf jeden Fall eine foo.ser angelegt.
Wenn ich den Inhalt allerdings auslesen möchte und die Zwei drücke, dann kommt folgender Exceptionfehler:
java.lang.ClassCastException: java.lang.String cannot be cast to adressebuch.Ausgabeasd
at adressebuch.Auswahl.auswaehlen(Adressebuch.java:63)
at adressebuch.Adressebuch.main(Adressebuch.java:95)
Also ich verstehe das so, dass der String nicht in Ausgabeasd übertragen werden kann, nur hilft mir das irgendwie nicht mehr weiter. Programmiere jetzt auch schon gut eine Stunde daran und sehe vielleicht den Wald vor lauter Bäumen nicht mehr :bahnhof:. Deshalb wäre ich für einen Rat sehr dankbar.
Eine andere Sache ist: gehe ich das Adressbuch "richtig" an oder ist meine Art sehr kompliziert?
Und falls mein Adressbuch irgendwann funktionieren sollte, gibt es eine Möglichkeit spezielle Einträge wieder zu löschen? Wonach müsste man googeln, hatte mal gesucht, aber nichts gefunden.
Danke für eure Hilfe
Gruß