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