7.2 读写文本文件

系列 -
本节摘要
这一节我们将学习如何在Java中进行文本文件的读写操作。通过动手实验,你将掌握使用FileWriter写入文本文件、使用BufferedReader读取文本文件,以及try-with-resources语句的正确使用方法。

在Java中,FileWriter是最简单、最常用的文本文件写入工具。它可以将字符串直接写入文件。

FileWriter的特点
  • 可以直接写入字符串
  • 如果文件不存在会自动创建
  • 默认会覆盖原文件内容

java

import java.io.FileWriter;  
import java.io.IOException;

public class Example08 {
    public static void main(String[] args) {
	    // 使用try-with-resources自动关闭资源
        try (FileWriter writer = new FileWriter("note.txt")) {
            // 写入一些文本
            writer.write("这是第一行\n");  // \n表示换行
            writer.write("这是第二行\n");
            System.out.println("文件写入成功!");
        } catch (IOException e) {
            System.out.println("写入文件出错:" + e.getMessage());
        }
    }
}

运行结果:

在项目根目录下可以找到note.txt文件,其内容为:

代码详解
  1. 创建FileWriter对象new FileWriter("note.txt")

    • 如果文件不存在会自动创建
    • 如果文件已存在,会完全覆盖原内容
  2. 写入文本writer.write("内容\n")

    • \n 表示换行符
    • 可以多次调用write()方法
  3. try-with-resources语句

    • 自动关闭文件,不需手动调用close()
    • 即使发生异常也会正确关闭资源
常规写法对比
下面展示不使用try-with-resources的传统写法,但建议使用上面的方法

java

import java.io.FileWriter;  
import java.io.IOException;  
  
public class Example09 {  
    public static void main(String[] args) {  
        FileWriter writer = null;  // 在try外声明,以便finally中可以访问  
        try {  
            writer = new FileWriter("note.txt");  
            writer.write("这是第一行\n");  
            writer.write("这是第二行\n");  
            System.out.println("文件写入成功!");  
        } catch (IOException e) {  
            System.out.println("写入文件出错:" + e.getMessage());  
        } finally {  
            // 在finally中确保关闭资源  
            if (writer != null) {  // 防止writer未初始化就抛出异常  
                try {  
                    writer.close();  // close()方法也可能抛出IOException  
                } catch (IOException e) {  
                    System.out.println("关闭文件出错:" + e.getMessage());  
                }  
            }  
        }  
    }  
}

读取文本文件时,我们使用BufferedReaderFileReader的组合。这种方式可以高效地逐行读取文件内容。

为什么用BufferedReader?
  • 缓冲功能:提高读取效率
  • 逐行读取:提供readLine()方法
  • 方便处理:适合处理大文件

java

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

public class Example10 {
    public static void main(String[] args) {
        // 使用try-with-resources自动关闭资源
        try (BufferedReader reader = new BufferedReader(
                new FileReader("note.txt"))) {
            
            String line;
            // 逐行读取文件内容,直到文件末尾
            while ((line = reader.readLine()) != null) {
                System.out.println(line); // 打印每一行内容
            }
            
        } catch (IOException e) {
            System.out.println("读取文件出错:" + e.getMessage());
        }
    }
}

运行结果:

读取成功
运行上面的代码,你将看到之前写入文件的内容被逐行打印出来。

编写一个交互式的Java程序,实现以下功能:

  1. 让用户输入文件名
  2. 让用户输入要写入的行数
  3. 循环让用户输入每一行的内容
  4. 将所有内容写入文件
  5. 读取并显示文件的完整内容
功能要求
  • 使用Scanner类获取用户输入
  • 使用try-with-resources语句处理文件操作
  • 要有错误处理(try-catch)

部分代码

java

import java.io.*;  
import java.util.Scanner;  
  
public class FileOperationHomework {  
    public static void main(String[] args) {  
        Scanner scanner = new Scanner(System.in);  
        // 1. 获取文件名  
        System.out.print("请输入文件名:");
        String fileName = scanner.nextLine();
        
  
        // 2. 获取要写入的行数  
        System.out.print("请输入要写入多少行:");
        int lineCount = scanner.nextInt();
        scanner.nextLine(); // 消耗换行符
        
  
        // 3. 写入文件  
        // 请在这里实现文件写入功能
        
        // 4. 读取并显示文件内容  
        System.out.println("\n文件内容如下:");  
        System.out.println("--------------------");  
  
        // 请在这里实现文件读取功能
        
    }  
}

运行截图

相关内容