Frage

Ich versuche, ein Objekt der Art „HashMap“ in eine Datei zu schreiben und es wiederherstellen, wenn mein Programm wieder laufen. Aber ich mit einem EOFException konfrontiert, wenn ich versuche, das Objekt zu lesen und das Objekt wird nicht aus der Datei lesen. Ich benutze die flush () und close () Methoden, wenn ich das Objekt für die Outputstream & Object schrieb. Ich schaffe auch Output & Input zusammen für meine Datei. hier ist mein Code:

DataOutputStream outToFile;
DataInputStream inFromFile;

ObjectOutputStream writeTableToFile;
ObjectInputStream readTableFromFile;
File tableFile;

public DNS(){
    try {
        tableFile = new File("table.txt");
        outToFile = new DataOutputStream(new FileOutputStream(tableFile) );
        writeTableToFile = new ObjectOutputStream(outToFile);

        inFromFile = new DataInputStream(new FileInputStream(tableFile));
        readTableFromFile = new ObjectInputStream(inFromFile);
        HashMap table2 = (HashMap) readTableFromFile.readObject();
        if (table2 == null)
            table=new HashMap(100);
        else
            table = table2;
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    }catch(EOFException e){
        table=new HashMap(100);
    }
    catch (IOException e) {
        e.printStackTrace();
    } catch (ClassNotFoundException e) {
        e.printStackTrace();
    }

}

und hier ist der Code für das Schreiben Objekt:

            table.put(NameField.getText(), IPField.getText());
            try {
                //writeTableToFile.reset();
                writeTableToFile.writeObject(table);
                writeTableToFile.flush();
            } catch (IOException e1) {
                e1.printStackTrace();
            }

Viele Grüße, Sajad

War es hilfreich?

Lösung

Die Datei scheint unvollständig zu sein. Wenn ich auf den Code schauen, sind die Erstellung der Datei table.txt und versuchen Sie es unmittelbar danach zu lesen.

Dieses Ctor:

new FileOutputStream(tableFile)

wird die Datei überschrieben werden soll. Wenn Ihr es später lesen, wird es (mit Ausnahme der Header-Informationen aus der OOS) leer sein

Andere Tipps

EOFException bedeutet, dass die Datei unvollständig ist. So ist es auch nicht flush()ed oder nicht close()ed oder eine Ausnahme irgendwo geschluckt wird.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top