写入文件时java对象流的问题

时间:2010-08-10 12:22:26

标签: java fileoutputstream

我正在尝试将一个类型的对象“HashMap”写入文件&我的程序再次运行时恢复它。但是当我尝试读取该对象并且未从文件中读取Object时,我遇到了EOFException。我用的是flush()&当我为FileOutputStream&编写对象时,close()方法ObjectOutputStream中。我还创建了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();
            }

此致 萨贾德

2 个答案:

答案 0 :(得分:0)

EOFException表示文件不完整。所以它不是flush()编辑或close()编辑或在某处吞下异常。

答案 1 :(得分:0)

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

这个ctor:

new FileOutputStream(tableFile)

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