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
    • 可扩展:替换关键字、修改行内容
相关推荐
大翻哥哥1 小时前
轻量级PHP网页在线客服系统 隐私聊天—— 可定制
开发语言·php
微学AI1 小时前
内网穿透的应用-服务器日志出现异常怎么办?Python监控、钉钉告警与远程处理教程
服务器·python·钉钉
麻瓜生活睁不开眼7 小时前
Android16修改全局桌面视图边框四直角显示为弧边圆角
android·java·深度学习
dear_bi_MyOnly7 小时前
【MyBatis 操作数据库】
java·数据库·学习·mybatis·学习方法
Wang's Blog7 小时前
Go-Zero 项目开发43:基于 Filebeat 收集各个服务的日志信息
开发语言·golang·go-zero·filebeat
2601_953720828 小时前
【计算机毕业设计】基于Spring Boot的心理健康咨询与评测系统的设计与实现
java·spring boot·后端
丈剑走天涯9 小时前
JDK 17 正式特性
java·开发语言
秋田君9 小时前
QT_QFontDialog类字体对话框
开发语言·qt
圣光SG9 小时前
Java操作题练习(七)
java·开发语言·算法
_Jimmy_10 小时前
Agent 溯源精度提升方案
人工智能·python·langchain