【问题标题】:EOFException when obtaining a Writer object on serilized file [closed]在序列化文件上获取 Writer 对象时出现 EOFException [关闭]
【发布时间】:2014-02-03 12:34:21
【问题描述】:

我正在关注:

java.io.EOFException
    at java.io.ObjectInputStream$PeekInputStream.readFully(Unknown Source)
    at java.io.ObjectInputStream$BlockDataInputStream.readShort(Unknown Source)
    at java.io.ObjectInputStream.readStreamHeader(Unknown Source)
    at java.io.ObjectInputStream.<init>(Unknown Source)
    at com.Temp.main(Temp.java:62)

下面是我尝试运行的代码:

class Dog implements Serializable {
    private static final long serialVersionUID = 1L;
    int age = 0;
    String color = "Black";
}

public class Temp {
    public static void main(String[] args) {
        FileOutputStream fos;
        ObjectOutputStream oos;
        FileInputStream fis;
        ObjectInputStream ios;
        File doggy;
        try {
            Dog fluffy = new Dog();
            fos = new FileOutputStream("DOG_store.txt");
            oos = new ObjectOutputStream(fos);
            oos.writeObject(fluffy);
            fos.close();
            oos.close();

            doggy = new File("DOG_store.txt");
            FileWriter fw = new FileWriter(doggy); // **This is Causing ISSUE**

            fis = new FileInputStream("DOG_store.txt");
            ios = new ObjectInputStream(fis);
            Dog scrappy = (Dog) ios.readObject();
            fis.close();
            ios.close();
            System.out.println(scrappy.age + " " + scrappy.color);
        } catch (IOException ioe) {
            ioe.printStackTrace();
        } catch (ClassNotFoundException cfne) {
            cfne.printStackTrace();
        }
    }

【问题讨论】:

  • 您是否检查过doggy 文件是否已创建?
  • "doggy" 文件对象是指已经创建的文件 "DOG_store.txt".... 是的,这个文件正在被创建。
  • 但是你甚至没有使用FileWriter fw
  • 嗯,这就是你的答案,不是吗。
  • 答:医生,医生,我戳自己的眼睛好痛。医生:好吧,别再戳自己的眼睛了。

标签: java file-io java-io filewriter eofexception


【解决方案1】:

当您执行FileWriter fw = new FileWriter(doggy); 时,它会以写入模式打开文件并删除文件的先前数据。这就是为什么读取它给EOFException 的文件的原因,因为文件中没有什么可读取的。

如果你这样做FileWriter fw = new FileWriter(doggy,true);,则不会出错,因为它不会删除文件的先前数据。

【讨论】:

  • new FileWriter 甚至没有被使用,为什么要基于它给出解决方案?
  • @user2310289 OP 说“我想了解这个 FileWriter 构造函数做了什么导致这个异常”
  • 好的,我现在可以看到那个深埋的评论了。
猜你喜欢
  • 2011-05-17
  • 1970-01-01
  • 1970-01-01
  • 2011-09-03
  • 1970-01-01
  • 2019-10-03
  • 1970-01-01
  • 2021-02-13
  • 1970-01-01
相关资源
最近更新 更多