gpt4 book ai didi

java - FileOutputStream 仅在程序终止后才写入文件的错误

转载 作者:行者123 更新时间:2023-12-02 09:41:21 29 4
gpt4 key购买 nike

我过去曾遇到过此错误,但从未完全理解它。关闭 OutputStream 后,无论 java 文件的位置或其调用方式如何,所有顺序运行或写入另一个文件的尝试都会完全搞砸,即使使用不同的写入文件的方法也是如此。出于这个原因,我避免关闭流,尽管不关闭流是一个可怕的习惯。在我的程序中,我创建了一个测试用例,其中有一个关闭语句,该语句破坏了我以前的所有流,由于某种原因,它们仅在程序终止后才写入文件。

我保持文件位置打开,并在适当的时间将文本写入文本文件中,但是 Windows 中的“预览”面板没有检测到它(过去经常发生这种情况)。请注意,在流意外关闭之前,这一切都运行良好。有没有办法重置流?我已经尝试在此过程中刷新它,但仍然没有像之前那样运行。

以下是创建文件的方法:

protected void createFile(String fileName, String content) {
try {
String fileLoc = PATH + fileName + ".txt";
File f = new File(fileLoc);
if(!f.isFile())
f.createNewFile();
FileOutputStream outputStream = new FileOutputStream(fileLoc);
byte[] strToBytes = content.getBytes();
outputStream.write(strToBytes);
} catch (IOException e) {
e.printStackTrace();
return;
}
}

以及读取文件的方法:

protected String readFile(String fileName) {
try {
StringBuilder sb = new StringBuilder("");
String fileLoc = PATH + fileName + ".txt";
File f = new File(fileLoc);
if(!f.exists())
return "null";
Scanner s = new Scanner(f);
int c = 0;
while(s.hasNext()) {
String str = s.nextLine();
sb.append(str);
if(s.hasNext())
sb.append("\n");
}
return sb.toString();
} catch(Exception e) {
e.printStackTrace();
return "null";
}
}

如果需要,我很乐意回答任何澄清问题。感谢您的帮助。

最佳答案

如果没有 try-resource,您需要在最后一个子句中关闭以确保没有泄漏。或者,如果您需要更多“及时”更新,请使用 Stream.flush()。

} catch (IOException e) {
e.printStackTrace();
return;
} finally {
outputStream.close();
}

关于java - FileOutputStream 仅在程序终止后才写入文件的错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57043167/

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