Skip to content

以下是对 FilePath 类的所有常见 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()
读取文件BufferedReaderFiles.readAllLines() / Files.lines()
写入文件BufferedWriterFiles.write()
列出目录内容listFiles()Files.newDirectoryStream()
获取绝对路径getAbsolutePath().toAbsolutePath().normalize()
互相转换toPath()toFile()
兼容性老式,操作简单现代,功能强大,支持符号链接等