Appearance
以下是对 File 和 Path 类的所有常见 API 进行全面梳理,包括文件创建、类型判断、文件复制、流操作等内容。
1. File 类的常见 API
1.1 创建文件和目录
文件创建
java
File file = new File("example.txt");
if (file.createNewFile()) { // 创建文件
System.out.println("文件已创建: " + file.getAbsolutePath());
} else {
System.out.println("文件已存在: " + file.getAbsolutePath());
}创建目录
java
File dir = new File("exampleDir");
if (dir.mkdir()) { // 创建单层目录
System.out.println("目录已创建: " + dir.getAbsolutePath());
}
File multiLevelDir = new File("parentDir/childDir");
if (multiLevelDir.mkdirs()) { // 创建多层目录
System.out.println("多级目录已创建: " + multiLevelDir.getAbsolutePath());
}1.2 判断文件类型和状态
java
File file = new File("example.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.length() + " 字节");1.3 删除文件或目录
java
File file = new File("example.txt");
if (file.delete()) {
System.out.println("文件已删除: " + file.getAbsolutePath());
} else {
System.out.println("文件删除失败或不存在");
}1.4 列出目录内容
java
File dir = new File("parentDir");
if (dir.isDirectory()) {
String[] files = dir.list(); // 返回文件名数组
for (String fileName : files) {
System.out.println(fileName);
}
File[] fileObjects = dir.listFiles(); // 返回 File 对象数组
for (File file : fileObjects) {
System.out.println(file.getName() + (file.isDirectory() ? " (目录)" : " (文件)"));
}
}1.5 文件复制(使用流操作)
File 没有直接支持复制功能,需要使用流手动实现。
java
import java.io.*;
File source = new File("source.txt");
File destination = new File("destination.txt");
try (FileInputStream in = new FileInputStream(source);
FileOutputStream out = new FileOutputStream(destination)) {
byte[] buffer = new byte[1024];
int bytesRead;
while ((bytesRead = in.read(buffer)) != -1) {
out.write(buffer, 0, bytesRead);
}
System.out.println("文件复制完成");
} catch (IOException e) {
e.printStackTrace();
}1.6 操作流(读取和写入)
文件读取
java
try (BufferedReader reader = new BufferedReader(new FileReader("example.txt"))) {
String line;
while ((line = reader.readLine()) != null) {
System.out.println(line);
}
} catch (IOException e) {
e.printStackTrace();
}文件写入
java
try (BufferedWriter writer = new BufferedWriter(new FileWriter("example.txt"))) {
writer.write("Hello, World!");
writer.newLine();
writer.write("This is another line.");
} catch (IOException e) {
e.printStackTrace();
}2. Path 类的常见 API
Path 是 Java NIO.2 的现代文件路径管理核心,结合 Files 工具类使用功能更强大。
2.1 创建文件和目录
文件创建
java
Path filePath = Paths.get("example.txt");
Files.createFile(filePath); // 如果文件已存在会抛出异常创建目录
java
Path dirPath = Paths.get("exampleDir");
Files.createDirectory(dirPath); // 创建单层目录
Path multiLevelDirPath = Paths.get("parentDir/childDir");
Files.createDirectories(multiLevelDirPath); // 创建多层目录2.2 判断文件类型和状态
java
Path path = Paths.get("example.txt");
System.out.println("是否存在: " + Files.exists(path));
System.out.println("是否是文件: " + Files.isRegularFile(path));
System.out.println("是否是目录: " + Files.isDirectory(path));
System.out.println("是否可读: " + Files.isReadable(path));
System.out.println("文件大小: " + Files.size(path) + " 字节");2.3 删除文件或目录
java
Path path = Paths.get("example.txt");
Files.deleteIfExists(path); // 如果文件存在则删除,否则不会抛异常2.4 列出目录内容
java
Path dirPath = Paths.get("parentDir");
try (DirectoryStream<Path> stream = Files.newDirectoryStream(dirPath)) {
for (Path entry : stream) {
System.out.println(entry.getFileName() + (Files.isDirectory(entry) ? " (目录)" : " (文件)"));
}
} catch (IOException e) {
e.printStackTrace();
}2.5 文件复制(直接复制)
Path 提供了内置方法 Files.copy,简化文件复制操作。
java
Path sourcePath = Paths.get("source.txt");
Path destinationPath = Paths.get("destination.txt");
Files.copy(sourcePath, destinationPath, StandardCopyOption.REPLACE_EXISTING); // 复制文件,若目标文件已存在则替换
System.out.println("文件复制完成");2.6 操作流(读取和写入)
文件读取
java
Path filePath = Paths.get("example.txt");
// 一次性读取所有行
List<String> lines = Files.readAllLines(filePath);
lines.forEach(System.out::println);
// 使用流读取文件
Files.lines(filePath).forEach(System.out::println);文件写入
java
Path filePath = Paths.get("example.txt");
List<String> lines = Arrays.asList("Hello, World!", "This is another line.");
Files.write(filePath, lines); // 写入文件2.7 获取绝对路径
java
// toAbsolutePath() 获取绝对路径
// normavlize() 处理.与..
toAbsolutePath().normalize()3. File 和 Path 的对比汇总
| 功能 | File(java.io) | Path(java.nio.file) |
|---|---|---|
| 创建文件 | createNewFile() | Files.createFile() |
| 创建目录 | mkdir() / mkdirs() | Files.createDirectory() / Files.createDirectories() |
| 判断是否存在 | exists() | Files.exists() |
| 判断类型(文件/目录) | isFile() / isDirectory() | Files.isRegularFile() / Files.isDirectory() |
| 删除文件或目录 | delete() | Files.delete() / Files.deleteIfExists() |
| 复制文件 | 手动使用流 | Files.copy() |
| 读取文件 | BufferedReader | Files.readAllLines() / Files.lines() |
| 写入文件 | BufferedWriter | Files.write() |
| 列出目录内容 | listFiles() | Files.newDirectoryStream() |
| 获取绝对路径 | getAbsolutePath() | .toAbsolutePath().normalize() |
| 互相转换 | toPath() | toFile() |
| 兼容性 | 老式,操作简单 | 现代,功能强大,支持符号链接等 |