Java 中的文件截断操作

2022-09-01 21:43:36

在 Java 中截断文件的最佳实践方法是什么?例如这个虚拟函数,仅作为澄清意图的示例:

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?

}

无法删除该文件,因为该文件充当占位符。


答案 1

使用 FileChannel.truncate

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

答案 2

一个使用 Files.write() 的 liner...

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

也可以使用 File.toPath() 从 File 转换为 Path。

还允许其他标准打开选项