gpt4 book ai didi

java - 有没有办法强制用Java写一个文件,这样函数返回后,文件就保证写完了?

转载 作者:行者123 更新时间:2023-11-29 09:23:01 25 4
gpt4 key购买 nike

我在 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();

fstream.close();

当我在 Eclipse 调试器中单步执行这段代码时,文件在调用 fstream.close() 后不存在(通过 file.exists() 验证)来自使用相同路径创建的另一个 File 对象,以及在 bash shell 中查找文件)。

我认为这是某种竞争条件,但我无法找到发生了什么。我尝试根据另一个 StackOverflow 问题添加 fstream.flush()fstream.getFD().sync(),但这没有帮助。

这种情况的最终症状是某些测试用例的失败有些不确定。对于连续相同的运行,无论是否进行调试,行为看起来都是一样的,但如果我更改调试器中的断点,行为就会改变。我相信当我在调试器外部运行代码时它通常/总是有效,但令人不安的是相同的代码可能在调试器内部失败。

这里会发生什么?有没有什么好的方法可以确保文件在我认为的时候被写入?

**更新:我想出了一些正在发生的事情。以下 hack 强制写入文件:

fstream.close();
fstream = new FileOutputStream(file, true);

这是一个 hack,但似乎强制操作系统完成其写入。

最佳答案

这似乎是 Eclipse 调试器的问题。我在编辑中提到的 hack 是我发现强制执行预期行为的唯一方法。

关于java - 有没有办法强制用Java写一个文件,这样函数返回后,文件就保证写完了?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4964169/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com