Operación de truncado de archivos en Java

¿Cuál es la mejor manera de truncar un archivo en Java? Por ejemplo, esta función ficticia, solo como un ejemplo para aclarar la intención:

void readAndTruncate(File f, List lines) throws FileNotFoundException { for (Scanner s = new Scanner(f); s.hasNextLine(); lines.add(s.nextLine())) {} // truncate f here! how? } 

El archivo no se puede eliminar dado que el archivo actúa como marcador de posición.

Use FileChannel # truncate () .

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

new FileWriter(f) truncará su archivo al abrirlo (a cero bytes), luego podrá escribir líneas en él

Un trazador de líneas usando Files.write () …

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

También puede usar File.toPath () para convertir de File a Path anteriormente.

También permite otras opciones StandardOpenOptions .

Depende de cómo va a escribir en el archivo, pero la forma más sencilla es abrir un nuevo FileOutputStream sin especificar que planea anexarlo al archivo (nota: el constructor base FileOuptutStream truncará el archivo, pero si lo desea para dejar en claro que el archivo está truncado, recomiendo usar la variante de dos parámetros).

Utilice RandomAccessFile # read y presione los bytes grabados de esta manera en un nuevo objeto File .

 RandomAccessFile raf = new RandomAccessFile(myFile,myMode); byte[] numberOfBytesToRead = new byte[truncatedFileSizeInBytes]; raf.read(numberOfBytesToRead); FileOutputStream fos = new FileOutputStream(newFile); fos.write(numberOfBytesToRead);