401. Java 文件操作基础 - 使用 Buffered Stream I/O 写入文本文件

文章目录

  • [401. Java 文件操作基础 - 使用 Buffered Stream I/O 写入文本文件](#401. Java 文件操作基础 - 使用 Buffered Stream I/O 写入文本文件)
    • [1️⃣ 基本写入示例](#1️⃣ 基本写入示例)
    • [2️⃣ 常用 OpenOption 参数](#2️⃣ 常用 OpenOption 参数)
    • [3️⃣ 总结](#3️⃣ 总结)
    • [1️⃣ 案例目标](#1️⃣ 案例目标)
    • [2️⃣ 完整代码示例](#2️⃣ 完整代码示例)
    • [3️⃣ 总结](#3️⃣ 总结)

401. Java 文件操作基础 - 使用 Buffered Stream I/O 写入文本文件

在 Java 中,Files.newBufferedWriter(Path, Charset, OpenOption...) 方法可以创建一个 BufferedWriter,用于高效写入文本文件。


1️⃣ 基本写入示例

以下示例展示如何使用 US-ASCII 编码向文件写入文本:

java 复制代码
import java.nio.file.*;
import java.io.BufferedWriter;
import java.io.IOException;
import java.nio.charset.Charset;

public class WriteFileExample {
    public static void main(String[] args) {
        Path file = Paths.get("output.txt");
        Charset charset = Charset.forName("US-ASCII");
        String content = "Hello, Java BufferedWriter!\n";

        try (BufferedWriter writer = Files.newBufferedWriter(file, charset)) {
            writer.write(content, 0, content.length());
            System.out.println("文件写入完成!");
        } catch (IOException e) {
            System.err.format("写入文件异常: %s%n", e);
        }
    }
}

💡 注意点:

  • 使用 try-with-resources 自动关闭 BufferedWriter,避免资源泄漏
  • write(String, int, int) 方法可以指定从哪一位置开始写,以及写入多少字符
  • 如果文件不存在,newBufferedWriter 会创建新文件;如果文件存在,默认会 覆盖原文件

2️⃣ 常用 OpenOption 参数

你可以通过可变参数 OpenOption... 控制文件的写入行为,例如:

参数 说明
WRITE 打开文件进行写入
APPEND 在文件末尾追加内容
CREATE 文件不存在则创建
CREATE_NEW 文件存在则抛异常
TRUNCATE_EXISTING 覆盖已有文件内容(默认行为)

示例:追加写入文件:

java 复制代码
try (BufferedWriter writer = Files.newBufferedWriter(file, charset, StandardOpenOption.APPEND)) {
    writer.write("追加一行文本\n");
}

3️⃣ 总结

  1. 对比 BufferedReader 与 BufferedWriter

    • BufferedReader 用于读取
    • BufferedWriter 用于写入
    • 都是基于缓冲区,效率高
  2. 演示覆盖与追加模式

    • 默认写入会覆盖原文件
    • 使用 APPEND 可在文件末尾追加
  3. 异常处理强调

    • I/O 操作可能抛出 IOException
    • 强调 try-with-resources 保证资源关闭
  4. 拓展示例

    • 向文件写入多行:
    java 复制代码
    List<String> lines = Arrays.asList("第一行", "第二行", "第三行");
    try (BufferedWriter writer = Files.newBufferedWriter(file, charset)) {
        for (String line : lines) {
            writer.write(line);
            writer.newLine(); // 写入换行符
        }
    }

1️⃣ 案例目标

  • 读取文本文件并统计行数
  • 查找包含指定关键字的行
  • 修改内容后写入新文件
  • 演示 BufferedReader/BufferedWriter + try-with-resources 使用

2️⃣ 完整代码示例

java 复制代码
import java.nio.file.*;
import java.io.*;
import java.nio.charset.Charset;
import java.util.*;
import java.util.stream.Collectors;

public class FileIOExample {

    public static void main(String[] args) {
        Path inputFile = Paths.get("input.txt");      // 待处理文件
        Path outputFile = Paths.get("output.txt");    // 输出文件
        Charset charset = Charset.forName("UTF-8");   // 字符集

        // 关键字,用于查找行
        String keyword = "Java";

        // 1️⃣ 读取文件并统计行数,同时过滤包含关键字的行
        List<String> linesContainingKeyword = new ArrayList<>();
        long totalLines = 0;

        try (BufferedReader reader = Files.newBufferedReader(inputFile, charset)) {
            String line;
            while ((line = reader.readLine()) != null) {
                totalLines++;
                if (line.contains(keyword)) {
                    linesContainingKeyword.add(line);
                }
            }
            System.out.println("文件总行数: " + totalLines);
            System.out.println("包含关键字 '" + keyword + "' 的行数: " + linesContainingKeyword.size());
        } catch (IOException e) {
            System.err.format("读取文件异常: %s%n", e);
            return;
        }

        // 2️⃣ 写入新文件,演示追加模式
        try (BufferedWriter writer = Files.newBufferedWriter(outputFile, charset, 
                StandardOpenOption.CREATE, StandardOpenOption.TRUNCATE_EXISTING)) {
            writer.write("=== 包含关键字 '" + keyword + "' 的行 ===\n");
            for (String line : linesContainingKeyword) {
                writer.write(line);
                writer.newLine(); // 写入换行符
            }
            System.out.println("处理结果已写入: " + outputFile);
        } catch (IOException e) {
            System.err.format("写入文件异常: %s%n", e);
        }
    }
}

3️⃣ 总结

  1. BufferedReader 读取文件
    • 使用 readLine() 按行读取
    • 自动忽略行结束符
    • 可以结合 Stream<String>(Java 8+)进行高级处理
  2. BufferedWriter 写入文件
    • 使用 write() 写内容
    • newLine() 插入平台独立的换行符
    • StandardOpenOption 控制文件创建、覆盖或追加
  3. try-with-resources
    • 自动关闭文件,避免资源泄漏
    • 捕获 IOException 并处理
  4. 实际演示
    • 在 input.txt 中加入多行测试数据
    • 演示统计总行数、筛选关键字、生成 output.txt
    • 可扩展:替换关键字、修改行内容
相关推荐
不瘦80斤不改名1 小时前
HTML基础(一)
开发语言·前端·html
Shadow(⊙o⊙)1 小时前
初识Qt+经典方式实现hello world!的交互
开发语言·c++·后端·qt·学习
Byte Wizard1 小时前
C语言指针深入浅出3
c语言·开发语言
88号技师1 小时前
2026年4月一区SCI-狒狒优化算法Baboon optimization algorithm-附Matlab免费代码
开发语言·算法·数学建模·matlab·优化算法
青山师1 小时前
线程池深度解析:从生产者-消费者模型到工业级调优实践
java·面试题·线程池·多线程·java面试
qq_589568102 小时前
封装工具类,JwtUtils令牌工具类
java
E_ICEBLUE2 小时前
如何提取 Word 文档中的表格并导出为 Excel(Python 教程)
python·word·excel
极光代码工作室2 小时前
基于NLP的智能问答系统设计
python·深度学习·自然语言处理·nlp
平凡但不平庸的码农2 小时前
Go context 包详解
开发语言·后端·golang