最常用、最安全的方式是使用 FileOutputStream 以不追加模式打开并立即关闭,构造流即清空文件;也可用 RandomAccessFile 的 setLength(0) 或 Files.write 配合 TRUNCATE_EXISTING。

在 Java 中清空一个文件的内容,本质是将文件长度截断为 0 字节,或者用空内容覆盖原内容。最常用、最安全的方式是使用 FileOutputStream 以不追加模式(append = false)打开并立即关闭,或配合 truncate() 方法。
用 FileOutputStream 覆盖写入空内容
这是兼容性最好、代码最简洁的方法:创建一个 FileOutputStream,不写任何数据,构造时自动清空文件。
- 如果文件不存在,会自动创建空文件
- 如果文件存在,原有内容被完全丢弃,长度变为 0
- 无需手动调用
write(new byte[0]),仅构造流即可生效
示例代码:
File file = new File("example.txt");
try (FileOutputStream fos = new FileOutputStream(file, false)) {
// 不需要写任何内容,构造即清空
}
用 RandomAccessFile truncate() 方法
适合需要更明确控制截断行为的场景,尤其处理大文件时更直观。
立即学习“Java免费学习笔记(深入)”;
- 用
"rw"模式打开,确保可读写 - 调用
setLength(0)直接将文件长度设为 0 - 原文件元数据(如权限、修改时间)保留,仅内容被清除
示例代码:
File file = new File("example.txt");
try (RandomAccessFile raf = new RandomAccessFile(file, "rw")) {
raf.setLength(0);
}
用 Files.write() 写入空字节数组(Java 7+)
基于 NIO.2 的函数式写法,语义清晰,推荐用于现代项目。
- 调用
Files.write(path, new byte[0], StandardOpenOption.TRUNCATE_EXISTING) - 必须显式指定
TRUNCATE_EXISTING,否则默认会抛出异常(文件已存在时) - 若文件不存在,会创建新空文件(需父目录存在)
示例代码:
Path path = Paths.get("example.txt");
Files.write(path, new byte[0], StandardOpenOption.CREATE, StandardOpenOption.TRUNCATE_EXISTING);
注意事项和常见误区
避免以下容易出错的做法:
- ❌ 不要用
FileWriter写空字符串"":可能因字符编码写入 BOM 或不可见字符(如 UTF-8 BOM),实际文件并非“真正为空” - ❌ 不要仅依赖
delete() + createNewFile():会丢失原始文件的权限、创建时间、硬链接等属性 - ✅ 推荐优先使用
FileOutputStream构造方式或Files.write(... TRUNCATE_EXISTING),简洁可靠


















