代码之家  ›  专栏  ›  技术社区  ›  Abhineet Kumar

创建FileOutputStream对象后,即使不向文件中写入任何内容,也会更改文件

  •  0
  • Abhineet Kumar  · 技术社区  · 9 年前

    编辑(为避免混淆): null 已写入文件“abc”和“efg”。

    运行以下代码后,文件“abc”的内容发生了变化 无效的 ,我在每次执行中都会得到EOFException:

    ObjIStream = new ObjectInputStream(new FileInputStream("abc"));
    M[][] objs  = (M[][]) ObjIStream.readObject();
    FS.objs = objs;
    ObjIStream.close();
    

    在这里 FS.objs 是类型为的类FS的静态成员 M[][] 类型

    另一方面,这一个对文件没有影响,在执行任何次数后,我都不会得到任何异常:

    ObjIStream = new ObjectInputStream(new FileInputStream("abc"));
    M[][] objs  = (M[][]) ObjIStream.readObject();
    ObjIStream.close();
    

    编辑:我刚刚发现了FS类中存在的问题:

    static{ 
     try { 
      ObjOStream = new ObjectOutputStream(new FileOutputStream("abc"));
      ObjOStream.close();
      ObjOStream = new java.io.ObjectOutputStream(new java.io.FileOutputStream("efg"));
      ObjOStream.close(); 
     } 
     catch (IOException ex) { } 
    }
    

    这到底有什么困扰?

    1 回复  |  直到 9 年前
        1
  •  1
  •   Abhineet Kumar    9 年前

    问题是 new FileOutputStream("abc") 这意味着 new FileOutputStream("abc", false) 。它会清除文件中的所有数据,因为您不需要附加任何内容。它叫 FileOutputStream.open(String name, boolean append) 这是一个 private native 作用它在覆盖模式下擦除文件中的所有内容。