我正在尝试清除我在java中创建的文件的内容。该文件由PrintWriter调用创建。我阅读here可以使用RandomAccessFile这样做,并在其他地方读到这实际上比调用新的PrintWriter并立即关闭它以使用空白覆盖文件更好。
但是,使用RandomAccessFile不起作用,我不明白为什么。这是我的代码的基本概要。
PrintWriter writer = new PrintWriter("temp","UTF-8");
while (condition) {
writer.println("Example text");
if (clearCondition) {
new RandomAccessFile("temp","rw").setLength(0);
// Although the solution in the link above did not include ',"rw"'
// My compiler would not accept without a second parameter
writer.println("Text to be written onto the first line of temp file");
}
}
writer.close();
运行上述代码的等效内容为我的临时文件提供了内容:
(让我们假设程序在满足clearCondition之前循环了两次)
Example Text
Example Text
Text to be written onto the first line of temp file
注意:写入文件需要能够在清除文件后再次将“示例文本”写入文件。 clearCondition并不意味着while循环被破坏。
答案 0 :(得分:3)
您希望刷新PrintWriter
以确保在将RandomAccessFile
的长度设置为0之前先将其缓冲区中的更改写出,或者将其关闭并重新打开新PrintWriter
写最后一行(要写的文字......)。优选前者:
if (clearCondition) {
writer.flush();
new RandomAccessFile("temp","rw").setLength(0);
答案 1 :(得分:0)
如果同时打开文件两次,你会很幸运。它没有指定由Java工作。
你应该做的是关闭PrintWriter并打开一个没有'append'参数的新的,或者'append'设置为'false'。