gpt4 book ai didi

Java FileWriter 覆盖

转载 作者:行者123 更新时间:2023-12-04 07:02:31 30 4
gpt4 key购买 nike

我有一段代码,只要有可用的新数据作为 InputStream 就会生成新数据。每次都覆盖同一个文件。有时文件在写入之前变为 0 kb。 Web 服务会定期读取这些文件。我需要避免文件为 0 字节的情况。

它是如何做到这一点的?在这种情况下,锁会有帮助吗?如果浏览器进来读取被锁定的文件,浏览器是否会继续显示缓存中的旧数据,直到锁定被释放并且文件可以再次被读取。

try{
String outputFile = "output.html";
FileWriter fWriter = new FileWriter(outputFile);
//write the data ...

fWriter .flush();


outputFile = "anotheroutput.html";
fWriter = new FileWriter(outputFile);
//write the data ...

fWriter .flush();
fWriter.close();
}
catch(Exception e)
{
e.prinStackTrace();
}

最佳答案

尝试写入一个临时文件(在同一文件系统中),一旦文件写入完成,使用 File.renameTo() 将其移动到位。如果您的底层文件系统支持原子移动操作(大多数都支持),那么您应该获得所需的行为。如果您在 Windows 上运行,则必须确保在阅读后关闭文件,否则文件移动将失败。

public class Data
{
private final File file;
protected Data(String fileName) {
this.file = new File(filename);
}

/* above is in some class somehwere
* then your code brings new info to the file
*/

//
public synchronized accessFile(String data) {
try {
// Create temporary file
String tempFilename = UUID.randomUUID().toString() + ".tmp";
File tempFile = new File(tempFilename);

//write the data ...
FileWriter fWriter = new FileWriter(tempFile);
fWriter.write(data);
fWriter.flush();
fWriter.close();

// Move the new file in place
if (!tempFile.renameTo(file)) {
// You may want to retry if move fails?
throw new IOException("Move Failed");
}
} catch(Exception e) {
// Do something sensible with the exception.
e.prinStackTrace();
}
}
}

关于Java FileWriter 覆盖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1616746/

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