397. Java 文件操作基础 - 创建常规文件与临时文件
✨ 1. 创建常规文件 createFile()
在 Java NIO.2 中,你可以用 Files.createFile(Path, FileAttribute<?>...) 来创建一个空文件。
- 特点:
- 如果文件已存在 → 抛出
FileAlreadyExistsException(避免覆盖,保证安全性 ✅)。 - 支持 一次性原子操作:检查文件是否存在 + 创建文件 → 防止并发或恶意代码插入。
- 可以指定文件的 初始属性(例如
POSIX文件权限)。
- 如果文件已存在 → 抛出
示例:创建一个新文件(默认属性)
import java.nio.file.*;
import java.io.IOException;
public class CreateFileDemo {
public static void main(String[] args) {
Path file = Paths.get("example.txt");
try {
Files.createFile(file);
System.out.println("文件创建成功: " + file.toAbsolutePath());
} catch (FileAlreadyExistsException e) {
System.err.println("文件已存在: " + file);
} catch (IOException e) {
System.err.println("创建文件失败: " + e.getMessage());
}
}
}
👉 运行结果(文件不存在时):
文件创建成功: /path/to/example.txt
👉 如果文件已存在:
文件已存在: example.txt
✨ 2. 创建临时文件 createTempFile()
有时候我们需要一个 临时文件(例如写缓存、处理临时数据、测试用文件),这时就用 Files.createTempFile()。
- 方法重载:
createTempFile(Path dir, String prefix, String suffix, FileAttribute<?>...)→ 允许指定目录、文件前缀、后缀。createTempFile(String prefix, String suffix, FileAttribute<?>...)→ 使用默认的 临时文件目录(不同系统目录不同,比如 Linux 通常是/tmp/)。
- 文件命名规则: 系统会自动在文件名里加上一个 随机数,保证唯一性。
示例:创建临时文件(默认目录)
import java.nio.file.*;
import java.io.IOException;
public class TempFileDemo {
public static void main(String[] args) {
try {
Path tempFile = Files.createTempFile("myapp_", ".tmp");
System.out.println("临时文件已创建: " + tempFile.toAbsolutePath());
} catch (IOException e) {
System.err.println("创建临时文件失败: " + e.getMessage());
}
}
}
👉 运行结果(Linux 下可能是):
临时文件已创建: /tmp/myapp_1234567890.tmp
👉 Windows 下可能是:
临时文件已创建: C:\Users\yaoxin\AppData\Local\Temp\myapp_987654321.tmp
🎤 总结
- 对比
createFile()与createTempFile()createFile()→ 需要指定路径,文件名固定,如果存在会报错。createTempFile()→ 自动生成不重复的文件名,适合做临时数据存储。
- 安全性
createFile()的 原子操作 避免了“检查-再创建”中可能被恶意程序插入的漏洞。- 临时文件常用于多线程/多进程场景,避免命名冲突。
- 实际应用场景
createFile()→ 初始化配置文件、日志文件、导出文件等。createTempFile()→ 大数据处理中间文件、Web 服务的缓存文件、测试时的临时文件。