7.2 读写文本文件

系列 -
目录
本节摘要
这一节我们将学习如何在Java中进行文本文件的读写操作。通过动手实验,你将掌握使用FileWriter写入文本文件、使用BufferedReader读取文本文件,以及try-with-resources语句的正确使用方法。
任务一:向文件写入文本
在Java中,FileWriter是最简单、最常用的文本文件写入工具。它可以将字符串直接写入文件。
FileWriter的特点
- 可以直接写入字符串
- 如果文件不存在会自动创建
- 默认会覆盖原文件内容
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文件,其内容为:
代码详解
-
创建FileWriter对象:
new FileWriter("note.txt")
- 如果文件不存在会自动创建
- 如果文件已存在,会完全覆盖原内容
-
写入文本:
writer.write("内容\n")
\n
表示换行符- 可以多次调用write()方法
-
try-with-resources语句:
- 自动关闭文件,不需手动调用close()
- 即使发生异常也会正确关闭资源
常规写法对比
下面展示不使用try-with-resources的传统写法,但建议使用上面的方法:
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());
}
}
}
}
}
任务二:从文件读取文本
读取文本文件时,我们使用BufferedReader和FileReader的组合。这种方式可以高效地逐行读取文件内容。
为什么用BufferedReader?
- 缓冲功能:提高读取效率
- 逐行读取:提供
readLine()
方法 - 方便处理:适合处理大文件
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程序,实现以下功能:
- 让用户输入文件名
- 让用户输入要写入的行数
- 循环让用户输入每一行的内容
- 将所有内容写入文件
- 读取并显示文件的完整内容
功能要求
- 使用Scanner类获取用户输入
- 使用try-with-resources语句处理文件操作
- 要有错误处理(try-catch)
部分代码:
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("--------------------");
// 请在这里实现文件读取功能
}
}
运行截图: