有没有一种方法可以强制用Java编写文件,这样在函数返回后,文件就可以保证被编写?
我在Eclipse中的调试器中运行以下代码:有没有一种方法可以强制用Java编写文件,这样在函数返回后,文件就可以保证被编写?,java,eclipse,file,file-io,Java,Eclipse,File,File Io,我在Eclipse中的调试器中运行以下代码: FileOutputStream fstream = new FileOutputStream(new File("foo")); byte[] ba = someBytes(); fstream.write(bytes); // tried with and without the following two lines. no difference // fstream.flush(); // fstream.getFD().sync();
FileOutputStream fstream = new FileOutputStream(new File("foo"));
byte[] ba = someBytes();
fstream.write(bytes);
// tried with and without the following two lines. no difference
// fstream.flush();
// fstream.getFD().sync();
fstream.close();
当我在Eclipse调试器中单步执行此代码时,调用fstream.close()
之后,文件并不存在(通过file.exists()
从另一个使用相同路径创建的文件对象进行验证,并在bash shell中查找文件)
我想这是某种比赛条件,但我还没能找到到底发生了什么。我尝试根据另一个StackOverflow问题添加fstream.flush()
和fstream.getFD().sync()
,但这没有帮助
这种情况的最终症状是一些测试用例在某种程度上不确定地失败。无论是否进行调试,连续相同运行的行为都是相同的,但是如果我在调试器中更改断点,行为可能会更改。我相信,当我在调试器外部运行代码时,它通常/总是有效的,但同样的代码在调试器内部可能会失败,这很麻烦
这里会发生什么?有没有一个好方法可以确保文件在我认为是的时候被写入
**最新消息:我了解了一些情况。以下黑客强制写入文件:
fstream.close();
fstream = new FileOutputStream(file, true);
这是一个黑客攻击,但似乎迫使操作系统完成其编写。这似乎是Eclipse调试器的一个问题。我在编辑中提到的黑客是我发现的唯一强制执行预期行为的方法。这似乎是Eclipse调试器的一个问题。我在编辑中提到的黑客是我发现的唯一强制执行预期行为的方法。JVM底层系统的详细信息?Fedora 14,java 1.6.0\u 20您是否在网络文件系统(例如nfs或samba挂载)上运行代码?这似乎更像是一个文件系统问题,而不是java问题。如果java中经常出现这种情况,许多代码就会中断。有关JVM底层系统的详细信息?Fedora 14,java 1.6.0您是否在网络文件系统(例如nfs或samba装载)上运行代码?这似乎更像是一个文件系统问题,而不是java问题。如果java中经常出现这种情况,很多代码都会中断。