Question: I am trying to clear the contents of a file I made in java. The file is created by a PrintWriter call. I read [here](https://stackoverflow.com/questions/2622206/how-to-delete-only-the-content-of-a-file-in-java) that one can use RandomAccessFile to do so, and read somewhere else that this is in fact better to use than calling a new PrintWriter and immediately closing it to overwrite the file with a blank one.

However, using the RandomAccessFile is not working, and I don't understand why. Here is the basic outline of my code.

```
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();

```

Running the equivalent of the above code is giving my temp file the contents:  
*(Lets imagine that the program looped twice before clearCondition was met)*

```
Example Text
Example Text
Text to be written onto the first line of temp file

```

NOTE: writer needs to be able to write "Example Text" to the file again after the file is cleared. The clearCondition does not mean that the while loop gets broken.

Answer: 
You want to either flush the `PrintWriter` to make sure the changes in its buffer are written out first, before you set the `RandomAccessFile`'s length to 0, or close it and re-open a new `PrintWriter` to write the last line (Text to be written...). Preferably the former:

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

```
You'll be lucky if opening the file twice at the same time works. It isn't specified to work by Java.

What you should do is close the PrintWriter and open a new one without the 'append' parameter, or with 'append' set to 'false'.