File truncate operation in Java

What is the best-practice way to truncate a file in Java? For example this dummy function, just as an example to clarify the intent:

void readAndTruncate(File f, List<String> lines)
        throws FileNotFoundException {
    for (Scanner s = new Scanner(f); s.hasNextLine(); lines.add(s.nextLine())) {}

    // truncate f here! how?

}

The file can not be deleted since the file is acting as a place holder.


Use FileChannel.truncate:

try (FileChannel outChan = new FileOutputStream(f, true).getChannel()) {
  outChan.truncate(newSize);
}

One liner using Files.write()...

Files.write(outFile, new byte[0], StandardOpenOption.TRUNCATE_EXISTING);

Can use File.toPath() to convert from File to Path prior as well.

Also allows other StandardOpenOptions.


new FileWriter(f) will truncate your file upon opening (to zero bytes), after that you can write lines to it


It depends on how you're going to write to the file, but the simplest way is to open a new FileOutputStream without specifying that you plan to append to the file (note: the base FileOuptutStream constructor will truncate the file, but if you want to make it clear that the file's being truncated, I recommend using the two-parameter variant).


RandomAccessFile.setLength() seems to be exactly what's prescribed in this case.