
MTS
Kaiser
Ich habe ein wahrscheinlich für erfahrene Java Menschen simples Problem...
Ich muss in meinem Projekt eine LinkedList abspeichern. Vom Prinzip her will ich das so haben, dass sie in 2 Schritten gespeichert wird:
(Die Liste enthält Objekte mit dem Attribut Name)
Erst wird eine Auflistung aller Namen, getrennt durch Simikola in eine Textdatei gespeichert. Danach werden alle Objekte eineln abgespeichert, mit dem jeweiligen "Name" als dateiname (+ Erweiterung).
Dieser Schritt geht auch soweit. Ob ich das geschickt gelöst habe weiss ich nicht. Ich bin noch neu in Java...
Das eigentlich Problem gibt es jetzt beim Auslesen. Und zwar bekomme ich dummerweise diese Textdatei nicht korrekt ausgelesen. Ich hab schon mehrere Versuche unternommen, die immer irgendwie gescheitert sind. Hier ersteinmal der code as is.
Das Abspeichern:
String filename = "/home/tobias/party.ser"; //sp?ter wird das hier Variabel ...
//1. Eine liste aller Member Namen speichern:
String MemberNames = "";
int i;
for (i = 0; i < Party.getMemberCount(); i = i + 1) {
MemberNames = MemberNames + Party.getMember(i).getName();
MemberNames = MemberNames + ";";
}
try
{
filename = "/home/tobias/" + Party.GetName() + ".dat";
FileOutputStream file = new FileOutputStream(filename);
DataOutputStream strm = new DataOutputStream(file);
//strm.writeUTF(MemberNames);
strm.writeBytes(MemberNames);
strm.close();
}
catch ( IOException e ) { System.err.println( e ); }
//2. Alle MemberObjekte Speichern!
for (i = 0; i < Party.getMemberCount(); i = i + 1) {
try
{
filename = "/home/tobias/" + Party.getMember(i).getName() + ".dat";
FileOutputStream file = new FileOutputStream( filename );
ObjectOutputStream o = new ObjectOutputStream(file);
o.writeObject( (Object) Party.getMember(i) );
o.close();
file.close();
}
catch ( IOException e ) { System.err.println( e ); }
}
}
Und mein Lesen Code
String MemberNames = "";
String filename = "/home/tobias/test.dat"; //Sp?ter Variabel ... test.dat existiert
if (Party == null) {Party = new UParty("test"); }; // spaeter muss der PartyName irgendwo abgespeichert und hier geladen werden.
try
{
// Spaeter soll filename ausw?hlbar sein
filename = "/home/tobias/test.dat";
FileInputStream file = new FileInputStream( filename );
// DataInputStream strm = new DataInputStream(file);
// InputStreamReader strm = new InputStreamReader(file);
BufferedReader strm = new BufferedReader(new InputStreamReader(file));
char[] c;
c = new char[5];
strm.read(c);
MemberNames = new String(c);
if (MemberNames != "") {jLabel3.setText(MemberNames );} else {jLabel3.setText("Nope");} // just for testing.
}
catch ( IOException e ) { System.err.println( e ); }
//Die Membereinlesen:
String Membername = "";
int i = 0;
int k = 0;
Tmember temp;
String thename;
while (i < MemberNames.length() ) {
k = i;
while (MemberNames.charAt(k) != ';') {k = k +1;}
Membername = MemberNames.substring(i,k);
k = k + 1;
i = k ;
try {
thename = "/home/tobias/" + Membername + ".dat";
FileInputStream file = new FileInputStream(filename);
ObjectInputStream o = new ObjectInputStream(file);
// System.out.println(o.available());
temp = new Tmember();
temp = (Tmember) o.readObject();
Party.AddMember( temp );
o.close();
file.close();
}
catch ( IOException e ) { System.err.println( e ); }
catch ( ClassNotFoundException e ) { System.err.println( e ); }
}
RefreshList();
}
Ich wäre für Hilfe dankbar
Ich muss in meinem Projekt eine LinkedList abspeichern. Vom Prinzip her will ich das so haben, dass sie in 2 Schritten gespeichert wird:
(Die Liste enthält Objekte mit dem Attribut Name)
Erst wird eine Auflistung aller Namen, getrennt durch Simikola in eine Textdatei gespeichert. Danach werden alle Objekte eineln abgespeichert, mit dem jeweiligen "Name" als dateiname (+ Erweiterung).
Dieser Schritt geht auch soweit. Ob ich das geschickt gelöst habe weiss ich nicht. Ich bin noch neu in Java...
Das eigentlich Problem gibt es jetzt beim Auslesen. Und zwar bekomme ich dummerweise diese Textdatei nicht korrekt ausgelesen. Ich hab schon mehrere Versuche unternommen, die immer irgendwie gescheitert sind. Hier ersteinmal der code as is.
Das Abspeichern:
String filename = "/home/tobias/party.ser"; //sp?ter wird das hier Variabel ...
//1. Eine liste aller Member Namen speichern:
String MemberNames = "";
int i;
for (i = 0; i < Party.getMemberCount(); i = i + 1) {
MemberNames = MemberNames + Party.getMember(i).getName();
MemberNames = MemberNames + ";";
}
try
{
filename = "/home/tobias/" + Party.GetName() + ".dat";
FileOutputStream file = new FileOutputStream(filename);
DataOutputStream strm = new DataOutputStream(file);
//strm.writeUTF(MemberNames);
strm.writeBytes(MemberNames);
strm.close();
}
catch ( IOException e ) { System.err.println( e ); }
//2. Alle MemberObjekte Speichern!
for (i = 0; i < Party.getMemberCount(); i = i + 1) {
try
{
filename = "/home/tobias/" + Party.getMember(i).getName() + ".dat";
FileOutputStream file = new FileOutputStream( filename );
ObjectOutputStream o = new ObjectOutputStream(file);
o.writeObject( (Object) Party.getMember(i) );
o.close();
file.close();
}
catch ( IOException e ) { System.err.println( e ); }
}
}
Und mein Lesen Code
String MemberNames = "";
String filename = "/home/tobias/test.dat"; //Sp?ter Variabel ... test.dat existiert

if (Party == null) {Party = new UParty("test"); }; // spaeter muss der PartyName irgendwo abgespeichert und hier geladen werden.
try
{
// Spaeter soll filename ausw?hlbar sein
filename = "/home/tobias/test.dat";
FileInputStream file = new FileInputStream( filename );
// DataInputStream strm = new DataInputStream(file);
// InputStreamReader strm = new InputStreamReader(file);
BufferedReader strm = new BufferedReader(new InputStreamReader(file));
char[] c;
c = new char[5];
strm.read(c);
MemberNames = new String(c);
if (MemberNames != "") {jLabel3.setText(MemberNames );} else {jLabel3.setText("Nope");} // just for testing.
}
catch ( IOException e ) { System.err.println( e ); }
//Die Membereinlesen:
String Membername = "";
int i = 0;
int k = 0;
Tmember temp;
String thename;
while (i < MemberNames.length() ) {
k = i;
while (MemberNames.charAt(k) != ';') {k = k +1;}
Membername = MemberNames.substring(i,k);
k = k + 1;
i = k ;
try {
thename = "/home/tobias/" + Membername + ".dat";
FileInputStream file = new FileInputStream(filename);
ObjectInputStream o = new ObjectInputStream(file);
// System.out.println(o.available());
temp = new Tmember();
temp = (Tmember) o.readObject();
Party.AddMember( temp );
o.close();
file.close();
}
catch ( IOException e ) { System.err.println( e ); }
catch ( ClassNotFoundException e ) { System.err.println( e ); }
}
RefreshList();
}
Ich wäre für Hilfe dankbar