0

我正在尝试将“HashMap”类型的对象写入文件并在我的程序再次运行时恢复它。但是当我尝试读取该对象并且未从文件中读取该对象时,我遇到了 EOFException。当我为 FileOutputStream 和 ObjectOutputStream 编写对象时,我使用了 flush() 和 close() 方法。我还为我的文件一起创建了 OutputStream 和 InputStream。这是我的代码:

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();
    }

}

这是编写对象的代码:

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

问候,萨贾德

4

2 回答 2

0

EOFException表示文件不完整。所以它要么没有flush()编辑,要么没有编辑,close()或者某个地方吞下了异常。

于 2010-08-10T12:27:39.853 回答
0

该文件似乎不完整。当我查看您的代码时,您正在创建文件 table.txt 并尝试在之后立即阅读它。

这位演员:

new FileOutputStream(tableFile)

将覆盖文件。如果您之后阅读它,它将是空的(来自OOS的标题信息除外)

于 2010-08-10T12:37:05.450 回答