以下是《Java SE 文件IO》的完整解析教程,涵盖 Java 中文件输入输出的基础与高级用法,包括流的分类、关键类、常见操作、代码示例及最佳实践。


Java SE 文件 IO 教程


📘 目录

  1. 文件 IO 简介
  2. 字节流 vs 字符流
  3. 常用输入输出类
  4. 文件的读取与写入
  5. 缓冲流提升效率
  6. 文件复制示例
  7. NIO 简介与对比
  8. 文件 IO 最佳实践
  9. 参考资料

1. 文件 IO 简介

Java 的 IO(Input/Output)机制通过流的形式实现数据读写操作,支持文件、网络、内存等不同数据源。文件 IO 是其中最常用的功能之一。


2. 字节流 vs 字符流

类型基础类适用场景
字节流InputStream / OutputStream任意类型的数据(如图像、音频)
字符流Reader / Writer文本文件(自动处理编码)

3. 常用输入输出类

🔹 字节流类:

  • FileInputStream
  • FileOutputStream
  • BufferedInputStream
  • BufferedOutputStream

🔹 字符流类:

  • FileReader
  • FileWriter
  • BufferedReader
  • BufferedWriter

4. 文件的读取与写入

🔸 字节流读取文件

import java.io.FileInputStream;

public class ByteReadExample {
    public static void main(String[] args) throws Exception {
        FileInputStream fis = new FileInputStream("example.txt");
        int b;
        while ((b = fis.read()) != -1) {
            System.out.print((char) b);
        }
        fis.close();
    }
}

🔸 字符流写入文件

import java.io.FileWriter;

public class CharWriteExample {
    public static void main(String[] args) throws Exception {
        FileWriter fw = new FileWriter("output.txt");
        fw.write("你好,Java 文件IO!");
        fw.close();
    }
}

5. 缓冲流提升效率

缓冲流通过内部缓冲区减少磁盘操作次数,性能更优。

示例:使用 BufferedReader 读取

import java.io.BufferedReader;
import java.io.FileReader;

public class BufferedReadExample {
    public static void main(String[] args) throws Exception {
        BufferedReader br = new BufferedReader(new FileReader("example.txt"));
        String line;
        while ((line = br.readLine()) != null) {
            System.out.println(line);
        }
        br.close();
    }
}

6. 文件复制示例

import java.io.FileInputStream;
import java.io.FileOutputStream;

public class FileCopy {
    public static void main(String[] args) throws Exception {
        FileInputStream in = new FileInputStream("source.txt");
        FileOutputStream out = new FileOutputStream("dest.txt");

        byte[] buffer = new byte[1024];
        int length;
        while ((length = in.read(buffer)) > 0) {
            out.write(buffer, 0, length);
        }

        in.close();
        out.close();
        System.out.println("复制完成!");
    }
}

7. Java NIO 简介

Java NIO(New IO)提供更高性能的文件读写:

示例:NIO 读取文件所有内容

import java.nio.file.*;
import java.util.List;

public class NIOReadExample {
    public static void main(String[] args) throws Exception {
        List<String> lines = Files.readAllLines(Paths.get("example.txt"));
        lines.forEach(System.out::println);
    }
}

NIO 优势:

  • 支持内存映射
  • 更适合处理大文件或多线程并发
  • 提供非阻塞 IO 支持(配合 Selector)

8. 文件 IO 最佳实践

  • ✅ 始终关闭流(推荐使用 try-with-resources)
  • ✅ 使用缓冲流优化性能
  • ✅ 避免一次读取太多数据
  • ✅ 处理编码问题(如 UTF-8)
  • ✅ 异常处理不可忽视,防止数据丢失

9. 参考资料