使用RandomAccessFile清除Java中的文件内容

时间:2014-01-31 20:00:47

标签: java file clear randomaccessfile

我正在尝试清除我在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循环被破坏。

2 个答案:

答案 0 :(得分:3)

您希望刷新PrintWriter以确保在将RandomAccessFile的长度设置为0之前先将其缓冲区中的更改写出,或者将其关闭并重新打开新PrintWriter写最后一行(要写的文字......)。优选前者:

if (clearCondition) {
writer.flush();
new RandomAccessFile("temp","rw").setLength(0);

答案 1 :(得分:0)

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

你应该做的是关闭PrintWriter并打开一个没有'append'参数的新的,或者'append'设置为'false'。