0

我正在尝试清除我在 java 中创建的文件的内容。该文件由 PrintWriter 调用创建。我在这里读到可以使用 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 循环被破坏。

4

2 回答 2

4

您想要刷新PrintWriter以确保首先写出其缓冲区中的更改,然后将RandomAccessFile' 的长度设置为 0,或者关闭它并重新打开一个新PrintWriter的以写入最后一行(要写入的文本.. .)。最好是前者:

if (clearCondition) {
writer.flush();
new RandomAccessFile("temp","rw").setLength(0);
于 2014-01-31T20:15:30.347 回答
0

如果同时打开文件两次,你会很幸运。Java 没有指定它可以工作。

您应该做的是关闭 PrintWriter 并打开一个不带 'append' 参数或将 'append' 设置为 'false' 的新的。

于 2014-01-31T21:06:11.107 回答