Operação de truncamento de arquivos em Java

Qual é a melhor maneira prática de truncar um arquivo em Java? Por exemplo, essa function fictícia, apenas como um exemplo para esclarecer a intenção:

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

O arquivo não pode ser excluído, pois o arquivo está agindo como um espaço reservado.

Use o FileChannel # truncate () .

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

new FileWriter(f) truncará seu arquivo ao abrir (para zero bytes), depois disso você pode escrever linhas para ele

Um forro usando Files.write () …

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

Pode usar File.toPath () para converter de arquivo para caminho anterior também.

Também permite outras StandardOpenOptions .

Depende de como você vai gravar no arquivo, mas a maneira mais simples é abrir um novo FileOutputStream sem especificar que você planeja append ao arquivo (nota: o construtor FileOuptutStream base irá truncar o arquivo, mas se você quiser para deixar claro que o arquivo está sendo truncado, recomendo usar a variante de dois parâmetros.

Use RandomAccessFile # read e empurre os bytes gravados dessa maneira para um novo object File .

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