跳转至

IO 与文件基础

够用即可。现代 Java 文件操作用 java.nio.fileFiles / Path别去啃老式的 InputStream/FileReader(那是历史包袱,Spring 里几乎用不到)。

核心 API

import java.nio.file.*;

Path file = Paths.get("target", "demo.txt");

// 写文件
Files.write(file, List.of("第一行", "第二行"), StandardCharsets.UTF_8);

// 读文件(一次全部行)
List<String> lines = Files.readAllLines(file, StandardCharsets.UTF_8);

// 追加
Files.write(file, List.of("第三行"), StandardCharsets.UTF_8, StandardOpenOption.APPEND);

★ 受检异常

public static void main(String[] args) throws IOException { ... }

文件操作抛 IOException(受检异常,第 11 章讲过)。要么 try/catch,要么 throws 声明。

前端人对照

场景 前端 Java
读文本 fs.readFile(Node) Files.readAllLines
写文本 fs.writeFile Files.write
路径 'a/b.txt' 字符串 Path 对象

实战提示

  • 后端业务里,文件上传/导出会用到 IO。Spring 提供了 MultipartFile 封装,底层还是这些。
  • 大文件别用 readAllLines(一次性读进内存),用 Files.lines() 返回 Stream 流式处理。
  • 编码永远显式指定 UTF-8,避免中文乱码。

完整可运行示例

package com.javaglm.language.ch17;

import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.nio.file.*;
import java.util.Arrays;
import java.util.List;

/**
 * 第 17 章 · IO 与文件基础。
 * 够用即可:现代写法用 java.nio.file 的 Files / Path(别去啃老的 InputStream)。
 * 注意:文件操作会抛 IOException(受检异常),必须处理。
 */
public class IoDemo {

    public static void main(String[] args) throws IOException {
        // 文件写到 target/ 下(避免污染源码目录)
        Path file = Paths.get("target", "ch17-demo.txt");

        // 1. 写文件:一行写完(Java 8 没有 List.of,用 Arrays.asList)
        Files.write(file,
                Arrays.asList("第一行", "第二行"),
                StandardCharsets.UTF_8);

        // 2. 读文件:一次读全部行
        List<String> lines = Files.readAllLines(file, StandardCharsets.UTF_8);
        lines.forEach(line -> System.out.println("读到:" + line));

        // 3. 追加写
        Files.write(file,
                Arrays.asList("第三行(追加)"),
                StandardCharsets.UTF_8,
                StandardOpenOption.APPEND);
        System.out.println("追加后总行数 = " + Files.readAllLines(file).size());
    }
}

:octicons-arrow-left-16: 上一章:Stream API | 下一章:注解与反射基础