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(Fil
Use Apache Commons IO API:
org.apache.commons.io.FileUtils.write(new File(...), "", Charset.defaultCharset());
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).
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.
Use FileChannel.truncate:
try (FileChannel outChan = new FileOutputStream(f, true).getChannel()) {
outChan.truncate(newSize);
}
RandomAccessFile.setLength()
seems to be exactly what's prescribed in this case.
Use RandomAccessFile#read and push the bytes recorded in this way into a new File
object.
RandomAccessFile raf = new RandomAccessFile(myFile,myMode);
byte[] numberOfBytesToRead = new byte[truncatedFileSizeInBytes];
raf.read(numberOfBytesToRead);
FileOutputStream fos = new FileOutputStream(newFile);
fos.write(numberOfBytesToRead);