Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
dieses mal brauche ich eure hilfe echt, bin völlig am verzweifeln. ich bin dabei ein telefonbuch zu schreiben und möchte die daten persistent speichern. nutze dazu die standard serialisierung. und zwar schreibe ich ein array in eine .ser datei und möchte es einfach auslesen . irgendwie wird aber nur der wert mit index 0 ausgeben. wie speichert man denn arrays? ich habe es so gemacht:
du könntest einfach Objektorientiert programmieren.
Java:
public class TelefonBuchEintrag implements Serializable {
private static final long serialVersionUID = -7919609629557094153L;
private String name;
private String number;
/**
* Setzt number
* @param number neue Nummer
*/
public void setNumber(String number) {
this.number = number;
}
/**
* @return the number
*/
public String getNumber() {
return number;
}
/**
* Setzt name
* @param name neuer Name
*/
public void setName(String name) {
this.name = name;
}
/**
* @return the name
*/
public String getName() {
return name;
}
}
irgendwie läuft bei alles schief. was passiert wenn cih aus einer datei gelsen haben und nun dasselbe objekt nochmal lesen moechte. da kommt bei mir immer ein io fehler.
danke
irgendwie läuft bei alles schief. was passiert wenn cih aus einer datei gelsen haben und nun dasselbe objekt nochmal lesen moechte. da kommt bei mir immer ein io fehler.
danke
Da wäre wohl die genaue Fehlermeldung interessant.
Wird ein ObjektInputStream genutzt? Ein Stream ist halt ein Stream, denn kann man nicht unbedingt zurücksetzen. (Ausser beim Schreiben)
Warum muss denn dasselbe nochmals gelesen werden?
ich habe es versucht jetzt anders zu schreiben, ist ist zweik Klassen aus meinem Programm:
Java:
class InsertListener implements ActionListener
{
JTextField name, number;
OutputStream os = null;
ObjectOutputStream oos;
File file;
public InsertListener(JTextField name, JTextField number)
{
this.name = name;
this.number = number;
file = new File("saves/data.ser");
try
{
os = new FileOutputStream(file);
oos = new ObjectOutputStream(os);
}
catch (IOException b){System.out.println(b);};
}
public void actionPerformed(ActionEvent e)
{
try
{
oos.writeObject(name.getText());
oos.writeObject(number.getText());
}
catch(IOException t){System.out.println(t);}
}
}
class ShowListener implements ActionListener
{
JFrame showFrame;
String[] columnNames;
JScrollPane con;
int i = 0;
InputStream is;
ObjectInputStream ois;
public ShowListener()
{
showFrame = new JFrame("Data");
showFrame.setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE);
showFrame.setBounds(100,50,300,400);
columnNames = new String[2];
columnNames[0] = "Names";
columnNames[1] = "Numbers";
try
{
is = new FileInputStream("saves/data.ser");
ois = new ObjectInputStream(is);
}
catch(IOException b){System.out.println(b);}
}
public void actionPerformed(ActionEvent e)
{
showFrame.setVisible(false);
boolean leer = false;
int i = 0;
String[][] inhalt = new String[150][2];
while(!leer)
{
try
{
inhalt[i][0] = (String) ois.readObject();
inhalt[i][1] = (String) ois.readObject();
}
catch(ClassNotFoundException d){System.out.println(d);}
catch(IOException l){System.out.println(l); leer = true;}
i++;
}
String[][] shortInhalt = new String[i][2];
while(i >= 0)
{
shortInhalt[i][0] = inhalt[i][0];
shortInhalt[i][1] = inhalt[i][1];
i = i--;
}
if(this.i != 0)
showFrame.remove(this.con);
this.con = new JScrollPane(new JTable(shortInhalt, columnNames));
showFrame.add(this.con);
showFrame.setVisible(true);
this.i++;
}
}
...mit der Absicht ein Array nicht in eine Datei schreiben zu müssen- läuft aber immer noch nicht. jetzt kommt nullpinterxception beim readen. danke für die Hilfe *_*
oder kann mir jemand eine bessere lösung vorschlagen um ein array resistent zu speichern und auch überschreiben zu können. oder habe ich nur etwas flasch gemacht? ich habe die datei mit file.delete(); gelöscht und dann mit file.newCreateFile() neu erzeugt - irgendwie habe ich auch immer read Fehler. wie funktioniert das lesen denn ? gibt es einen zeiger oder woher weiß das objectoutputstream obejct, welches int zum beispiel es nehmen soll?
sorry, wegen den vielen fragen, aber ich verzweifle schon seit mehreren tagen
class InsertListener implements ActionListener
{
JTextField name, number;
public InsertListener(JTextField name, JTextField number)
{
this.name = name;
this.number = number;
}
public void actionPerformed(ActionEvent e)
{
File fileData = new File("saves/data.ser");
File fileSize = new File("saves/size.ser");
try
{
OutputStream os = new FileOutputStream(fileData);
ObjectOutputStream oos = new ObjectOutputStream(os);
OutputStream os_second = new FileOutputStream(fileSize);
ObjectOutputStream oos_second = new ObjectOutputStream(os_second);
InputStream is = new FileInputStream("saves/data.ser");
ObjectInputStream ois = new ObjectInputStream(is);
oos.writeObject(name.getText());
oos.writeObject(number.getText());
oos.close();
int x;
if(ois.available() >= 0)
x = (int)ois.readInt();
else
x = 0;
ois.close();
x++;
fileSize.delete();
fileSize.createNewFile();
oos_second.writeInt(x);
oos_second.close();
}
catch(IOException t){System.err.println(t);}
}
}
class ShowListener implements ActionListener
{
JFrame showFrame;
String[] columnNames;
JScrollPane con;
int i = 0;
public ShowListener()
{
showFrame = new JFrame("Data");
showFrame.setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE);
showFrame.setBounds(100,50,300,400);
columnNames = new String[2];
columnNames[0] = "Names";
columnNames[1] = "Numbers";
}
public void actionPerformed(ActionEvent e)
{
showFrame.setVisible(false);
int w = 0;
ObjectInputStream ois = null;
try
{
InputStream is = new FileInputStream("saves/data.ser");
ois = new ObjectInputStream(is);
InputStream is_second = new FileInputStream("saves/size.ser");
ObjectInputStream ois_second = new ObjectInputStream(is_second);
w = (int)ois_second.readInt();
ois_second.close();
}
catch(IOException m){System.out.println(m);}
if(ois != null)
{
String[][] inhalt = new String[w][2];
w--;
while(w >= 0)
{
try
{
inhalt[w][0] = (String) ois.readObject();
inhalt[w][1] = (String) ois.readObject();
}
catch(ClassNotFoundException d){System.out.println(d);}
catch(IOException l){System.out.println(l);}
w--;
}
try{ois.close();}catch(IOException g){System.out.println(g);}
if(this.i != 0)
showFrame.remove(this.con);
this.con = new JScrollPane(new JTable(inhalt, columnNames));
showFrame.add(this.con);
showFrame.setVisible(true);
this.i++;
}
}
}
ich weiß echt nicht weiter. wenn ich auf den button insert im programm drücke kommt immer ein EOFException. also zum Code: die erste Klasse ist, soll name und number eintragen in eine datei und zusätzlich noch den zähler, wie viele einträge es gibt, um 1 erhöhen und in eine seperate datei schreiben . den zähler verwende ich dann in der zweiten klasse, die ein fenster mit den daten in einer tabelle erzeugt, um die größe des arrays zu kennen.
hoffe das reicht. bitte bitte kann mir einer helfen.
Also, meine Vorschläge für diese Klasse jetzt:
1. Ich würde einen FileWriter (Java Platform SE 6) benutzen, da du ja keine Objekte, sondern hier nur Strings in die Datei schreibst
2. Du brauchst die Datei nicht zu löschen. Dem Konstruktor vom FileWriter kannst du sagen, ob er überschreiben oder anhängen soll
3. Die Zeile der EOFException wäre interessant
4. Auch zum einlesesn brauchst du keinen ObjectInputStream, sondern könntest eigentlich direkt den FileInputStream verwenden
Ich würde halt immer versuchen möglichst "einfache" Klassen zu verwenden, um so Fehler zu vermeiden. Den direkt Fehler sehe ich jetzt nicht.