创建FileOutputStream对象后更改文件,即使没有将任何内容写入文件

时间:2015-12-23 13:04:16

标签: java fileoutputstream

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

运行以下代码后,文件“abc”的内容会发生变化null,并且每次执行都会得到EOFException:

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

此处,FS.objs是类型M[][]类型的FS类的静态成员。

另一方面,这个对文件没有影响,并且在执行任意数量后我没有得到任何异常:

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 个答案:

答案 0 :(得分:0)

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