Java文件操作 #
一、File类 #
1.1 创建File对象 #
java
File file1 = new File("test.txt");
File file2 = new File("/path/to/file.txt");
File dir = new File("/path/to");
File file3 = new File(dir, "file.txt");
1.2 文件信息 #
java
File file = new File("test.txt");
System.out.println("文件名: " + file.getName());
System.out.println("路径: " + file.getPath());
System.out.println("绝对路径: " + file.getAbsolutePath());
System.out.println("父目录: " + file.getParent());
System.out.println("文件大小: " + file.length() + " bytes");
System.out.println("最后修改: " + new Date(file.lastModified()));
1.3 判断方法 #
java
File file = new File("test.txt");
System.out.println("存在: " + file.exists());
System.out.println("是文件: " + file.isFile());
System.out.println("是目录: " + file.isDirectory());
System.out.println("可读: " + file.canRead());
System.out.println("可写: " + file.canWrite());
System.out.println("可执行: " + file.canExecute());
System.out.println("是隐藏: " + file.isHidden());
System.out.println("是绝对路径: " + file.isAbsolute());
1.4 创建和删除 #
java
File file = new File("test.txt");
File dir = new File("dir/subdir");
// 创建文件
if (!file.exists()) {
boolean created = file.createNewFile();
}
// 创建目录
boolean created = dir.mkdirs(); // 创建多级目录
// 删除文件
boolean deleted = file.delete();
// 退出JVM时删除
file.deleteOnExit();
1.5 重命名和移动 #
java
File oldFile = new File("old.txt");
File newFile = new File("new.txt");
boolean renamed = oldFile.renameTo(newFile);
// 移动文件
File src = new File("dir1/file.txt");
File dest = new File("dir2/file.txt");
src.renameTo(dest);
1.6 目录操作 #
java
File dir = new File(".");
// 列出文件名
String[] names = dir.list();
// 列出File对象
File[] files = dir.listFiles();
// 过滤
File[] txtFiles = dir.listFiles((d, name) -> name.endsWith(".txt"));
// 遍历目录
public static void listFiles(File dir) {
File[] files = dir.listFiles();
if (files != null) {
for (File file : files) {
if (file.isDirectory()) {
listFiles(file);
} else {
System.out.println(file.getAbsolutePath());
}
}
}
}
二、Files工具类(Java 7+) #
2.1 文件读写 #
java
import java.nio.file.Files;
import java.nio.file.Paths;
// 读取所有字节
byte[] bytes = Files.readAllBytes(Paths.get("test.txt"));
// 读取所有行
List<String> lines = Files.readAllLines(Paths.get("test.txt"), StandardCharsets.UTF_8);
// 写入字节
Files.write(Paths.get("output.txt"), "Hello World".getBytes());
// 写入行
List<String> content = Arrays.asList("第一行", "第二行", "第三行");
Files.write(Paths.get("output.txt"), content);
2.2 文件操作 #
java
Path path = Paths.get("test.txt");
// 创建文件
Files.createFile(path);
// 创建目录
Files.createDirectory(Paths.get("dir"));
Files.createDirectories(Paths.get("dir/subdir"));
// 删除文件
Files.delete(path);
Files.deleteIfExists(path);
// 复制文件
Files.copy(Paths.get("src.txt"), Paths.get("dest.txt"));
Files.copy(Paths.get("src.txt"), Paths.get("dest.txt"), StandardCopyOption.REPLACE_EXISTING);
// 移动文件
Files.move(Paths.get("src.txt"), Paths.get("dest.txt"));
2.3 文件信息 #
java
Path path = Paths.get("test.txt");
System.out.println("大小: " + Files.size(path));
System.out.println("是否可读: " + Files.isReadable(path));
System.out.println("是否可写: " + Files.isWritable(path));
System.out.println("是否可执行: " + Files.isExecutable(path));
System.out.println("是否隐藏: " + Files.isHidden(path));
System.out.println("最后修改: " + Files.getLastModifiedTime(path));
System.out.println("类型: " + Files.probeContentType(path));
2.4 目录遍历 #
java
// 列出目录内容
try (DirectoryStream<Path> stream = Files.newDirectoryStream(Paths.get("."))) {
for (Path entry : stream) {
System.out.println(entry.getFileName());
}
}
// 过滤
try (DirectoryStream<Path> stream = Files.newDirectoryStream(
Paths.get("."), "*.txt")) {
for (Path entry : stream) {
System.out.println(entry.getFileName());
}
}
// 递归遍历
Files.walk(Paths.get("."))
.filter(Files::isRegularFile)
.forEach(System.out::println);
// 查找文件
Path found = Files.walk(Paths.get("."))
.filter(p -> p.getFileName().toString().equals("test.txt"))
.findFirst()
.orElse(null);
2.5 文件属性 #
java
Path path = Paths.get("test.txt");
// 获取属性
Map<String, Object> attrs = Files.readAttributes(path, "size,lastModifiedTime,isRegularFile");
// BasicFileAttributes
BasicFileAttributes basic = Files.readAttributes(path, BasicFileAttributes.class);
System.out.println("创建时间: " + basic.creationTime());
System.out.println("最后访问: " + basic.lastAccessTime());
System.out.println("最后修改: " + basic.lastModifiedTime());
System.out.println("是目录: " + basic.isDirectory());
System.out.println("是文件: " + basic.isRegularFile());
三、临时文件 #
3.1 创建临时文件 #
java
// 创建临时文件
Path tempFile = Files.createTempFile("prefix", ".suffix");
System.out.println(tempFile);
// 创建临时目录
Path tempDir = Files.createTempDirectory("tempDir");
System.out.println(tempDir);
// 指定目录创建临时文件
Path customTemp = Files.createTempFile(Paths.get("/tmp"), "prefix", ".suffix");
3.2 自动删除 #
java
Path tempFile = Files.createTempFile("prefix", ".suffix");
tempFile.toFile().deleteOnExit();
四、总结 #
| 类/方法 | 说明 |
|---|---|
| File | 传统文件操作类 |
| Files | NIO文件工具类 |
| Path | 文件路径类 |
| Paths | 创建Path的工具类 |
文件操作要点:
- File类适合基本文件操作
- Files工具类提供更现代的API
- 使用Path代替String表示路径
- 注意文件编码
最后更新:2026-03-26