楼层: 首页/ 软件技术/ Java 基础/ IO 与 NIO:读写文件
07

IO 与 NIO:读写文件

IO Streams · Files · NIO.2 Path / Files

程序要跟硬盘打交道:读配置文件、写日志、导出报表。Java 的 IO 体系乍一看类名一大堆,其实分两派:字节流(InputStream/OutputStream,操作二进制:图片、视频)和字符流(Reader/Writer,操作文本,自动处理编码)。读文本用字符流,别拿字节流硬读中文。

场景用什么人话
读文本文件BufferedReader 或 NIO.2一行一行读,带缓冲,快。
写文本文件BufferedWriter / Files.writeString追加还是覆盖想清楚。
拷贝图片/视频FileInputStream + FileOutputStream二进制搬运,别碰编码。
现代写法java.nio.file.Files(Java 7+)一行搞定读写,强烈推荐。

NIO.2 新写法:Files 工具类,几行顶过去一堆流

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

public class FileDemo {
    public static void main(String[] args) throws Exception {
        Path p = Path.of("note.txt");

        // 一行写文本(自动用 UTF-8,自动关闭)
        Files.writeString(p, "第一行\n第二行\n");

        // 一行读成字符串
        String content = Files.readString(p);
        System.out.println(content);

        // 一行读成行列表
        List<String> lines = Files.readAllLines(p);
        for (String line : lines) {
            System.out.println("读:" + line);
        }
    }
}
中文乱码的根源

读文件乱码,九成是编码没对齐:文件存的是 UTF-8,你却用 GBK 去读,中文就变成火星文。记住:读写文本统一指定 UTF-8。老版 new FileReader("a.txt") 用的是操作系统默认编码,跨机器就乱码;用 Files.readString(path, StandardCharsets.UTF_8) 显式指定,一劳永逸。

章末面试 · IO 与编码(3 题)

1.(概念题)字节流和字符流区别?读中文文本文件用哪个?

查看答案

答案:字节流(InputStream/OutputStream)操作二进制,字符流(Reader/Writer)操作文本并处理编码。读中文文本用 BufferedReader / Files.readString,别拿字节流硬读。

2.(排错题)读文件中文乱码,最可能的原因?怎么修?

查看答案

答案:编码没对齐。文件是 UTF-8 却用 GBK 读。显式指定 StandardCharsets.UTF_8,别用操作系统默认编码的 FileReader。

3.(代码题)写文本文件一行搞定的现代写法?

查看答案

答案:Files.writeString(path, content, StandardCharsets.UTF_8),自动关流,不用手写 BufferedWriter。