首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Java 文件操作全指南:读写、复制、压缩与实战应用

Java 文件操作全指南:读写、复制、压缩与实战应用

原创
作者头像
用户11690575
发布2025-06-10 22:34:31
发布2025-06-10 22:34:31
24600
代码可运行
举报
运行总次数:0
代码可运行

一、前言

文件处理是 Java 应用程序中最常见、最实用的功能之一,无论是读取配置文件、处理日志、批量处理 CSV,还是备份、压缩文件,都离不开对文件的高效操作。

本篇文章将系统讲解 Java 文件操作的各个方面,包括文件读取、写入、复制、删除、压缩等,并提供实际代码示例。


二、Java 文件与目录的基础操作

2.1 使用 File 类检查文件属性

代码语言:javascript
代码运行次数:0
运行
复制
java复制编辑import java.io.File;

public class FileCheck {
    public static void main(String[] args) {
        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.length());
        System.out.println("绝对路径: " + file.getAbsolutePath());
    }
}

🖼️ 图示(结构图):文件属性检测流程图


三、文件读取与写入

3.1 读取文本文件(逐行)

代码语言:javascript
代码运行次数:0
运行
复制
java复制编辑import java.io.*;
import java.nio.file.*;

public class FileReaderExample {
    public static void main(String[] args) throws IOException {
        Path path = Paths.get("data.txt");

        Files.lines(path).forEach(System.out::println);
    }
}

3.2 写入文本文件(覆盖或追加)

代码语言:javascript
代码运行次数:0
运行
复制
java复制编辑Files.write(Paths.get("output.txt"),
            "写入内容".getBytes(),
            StandardOpenOption.CREATE, StandardOpenOption.APPEND);

四、复制与删除文件/目录

4.1 复制文件

代码语言:javascript
代码运行次数:0
运行
复制
java复制编辑Path src = Paths.get("source.txt");
Path dest = Paths.get("copy.txt");
Files.copy(src, dest, StandardCopyOption.REPLACE_EXISTING);

4.2 删除文件

代码语言:javascript
代码运行次数:0
运行
复制
java复制编辑Files.deleteIfExists(Paths.get("copy.txt"));

4.3 删除整个目录(含文件)

需使用递归或 Files.walk()

代码语言:javascript
代码运行次数:0
运行
复制
java复制编辑Files.walk(Paths.get("tempDir"))
     .sorted(Comparator.reverseOrder())
     .forEach(path -> {
         try {
             Files.delete(path);
         } catch (IOException e) {
             e.printStackTrace();
         }
     });

五、处理大文件:使用缓冲流

代码语言:javascript
代码运行次数:0
运行
复制
java复制编辑try (BufferedReader reader = new BufferedReader(new FileReader("large.txt"))) {
    String line;
    while ((line = reader.readLine()) != null) {
        System.out.println(line);
    }
}

相比 Files.lines(),缓冲流在处理 GB 级大文件时更高效。


六、读写二进制文件

代码语言:javascript
代码运行次数:0
运行
复制
java复制编辑try (FileOutputStream fos = new FileOutputStream("image_copy.jpg")) {
    byte[] bytes = Files.readAllBytes(Paths.get("image.jpg"));
    fos.write(bytes);
}

七、压缩与解压文件(ZIP)

7.1 创建 ZIP 文件

代码语言:javascript
代码运行次数:0
运行
复制
java复制编辑import java.util.zip.*;

public class ZipExample {
    public static void main(String[] args) throws IOException {
        try (ZipOutputStream zos = new ZipOutputStream(new FileOutputStream("archive.zip"))) {
            ZipEntry entry = new ZipEntry("hello.txt");
            zos.putNextEntry(entry);
            byte[] data = "这是文件内容".getBytes();
            zos.write(data);
            zos.closeEntry();
        }
    }
}

🖼️ 图示:ZIP 流程结构图(文件 → ZipEntry → ZipOutputStream)

7.2 解压 ZIP 文件

代码语言:javascript
代码运行次数:0
运行
复制
java复制编辑try (ZipInputStream zis = new ZipInputStream(new FileInputStream("archive.zip"))) {
    ZipEntry entry;
    while ((entry = zis.getNextEntry()) != null) {
        Files.copy(zis, Paths.get(entry.getName()), StandardCopyOption.REPLACE_EXISTING);
    }
}

八、遍历目录树与文件过滤器

代码语言:javascript
代码运行次数:0
运行
复制
java复制编辑Files.walk(Paths.get("logs"))
     .filter(p -> p.toString().endsWith(".log"))
     .forEach(System.out::println);

你可以使用 .filter() 方法仅处理特定类型文件(如 CSV、JSON、图片等)。


九、真实案例:日志文件每日归档

代码语言:javascript
代码运行次数:0
运行
复制
java复制编辑public class LogArchiver {
    public static void main(String[] args) throws IOException {
        String logFile = "server.log";
        String archiveName = "log_" + System.currentTimeMillis() + ".zip";

        try (ZipOutputStream zos = new ZipOutputStream(new FileOutputStream(archiveName))) {
            ZipEntry entry = new ZipEntry("server.log");
            zos.putNextEntry(entry);
            Files.copy(Paths.get(logFile), zos);
            zos.closeEntry();
        }

        Files.delete(Paths.get(logFile)); // 删除原始日志
    }
}

📦 示例用途:Web 应用每日归档日志 + 删除旧文件


十、文件监听(自动检测文件变化)

使用 WatchService 监听文件夹变化:

代码语言:javascript
代码运行次数:0
运行
复制
java复制编辑WatchService watchService = FileSystems.getDefault().newWatchService();
Path path = Paths.get("watched_folder");
path.register(watchService, StandardWatchEventKinds.ENTRY_CREATE,
              StandardWatchEventKinds.ENTRY_DELETE, StandardWatchEventKinds.ENTRY_MODIFY);

WatchKey key;
while ((key = watchService.take()) != null) {
    for (WatchEvent<?> event : key.pollEvents()) {
        System.out.println("事件类型:" + event.kind());
        System.out.println("发生文件:" + event.context());
    }
    key.reset();
}

十一、总结

功能

对应类/方法

基础检查

File、Files.exists

文本读写

Files.lines / write

目录遍历

Files.walk()

压缩解压

ZipInputStream 等

文件监控

WatchService


十二、延伸阅读建议

  • Java NIO 文件通道 (FileChannel) 实现大文件高速读写
  • 使用 Apache Commons IO 提供的工具类进行简化操作
  • 构建文件上传/下载的 Java Web 应用(可用 Servlet、Spring Boot 实现)

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、前言
  • 二、Java 文件与目录的基础操作
    • 2.1 使用 File 类检查文件属性
  • 三、文件读取与写入
    • 3.1 读取文本文件(逐行)
    • 3.2 写入文本文件(覆盖或追加)
  • 四、复制与删除文件/目录
    • 4.1 复制文件
    • 4.2 删除文件
    • 4.3 删除整个目录(含文件)
  • 五、处理大文件:使用缓冲流
  • 六、读写二进制文件
  • 七、压缩与解压文件(ZIP)
    • 7.1 创建 ZIP 文件
    • 7.2 解压 ZIP 文件
  • 八、遍历目录树与文件过滤器
  • 九、真实案例:日志文件每日归档
  • 十、文件监听(自动检测文件变化)
  • 十一、总结
  • 十二、延伸阅读建议
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档