FileWriter
或BufferedWriter
配合File
类实现文本写入,打开文件则通过FileReader
或BufferedReader
逐行读取内容,需注意异常处理(如IOException
)和资源关闭(推荐try-with-resources),示例代码简洁易用,适合基础文件操作。在Java中保存和打开.txt
文件是日常开发中的基础操作,下面详细介绍具体实现方法、最佳实践及完整代码示例,确保内容专业可靠,符合文件操作的核心规范(参考Oracle官方文档和Java API标准)。
保存TXT文件(写入数据)
Java提供多种类实现文本写入,核心步骤:创建文件→写入内容→关闭资源。
使用 FileWriter
+ BufferedWriter
(高效推荐)
import java.io.BufferedWriter; import java.io.FileWriter; import java.io.IOException; public class SaveTxtFile { public static void main(String[] args) { String filePath = "example.txt"; // 文件路径 String content = "Hello, Java!n这是第二行文本。"; // 写入内容 try (BufferedWriter writer = new BufferedWriter(new FileWriter(filePath))) { writer.write(content); // 写入内容 System.out.println("文件保存成功!"); } catch (IOException e) { System.err.println("保存失败: " + e.getMessage()); } } }
- 优势:
BufferedWriter
提供缓冲区,减少磁盘I/O次数,提升性能。 - 注意:默认覆盖原文件;需追加内容用
new FileWriter(filePath, true)
。
使用 Files
工具类(Java 7+ 简洁写法)
import java.nio.file.Files; import java.nio.file.Paths; import java.io.IOException; public class SaveWithFiles { public static void main(String[] args) { String path = "nio_example.txt"; String text = "使用Files类写入文本"; try { Files.write(Paths.get(path), text.getBytes()); // 直接写入字节 System.out.println("文件已保存"); } catch (IOException e) { e.printStackTrace(); } } }
- 优势:代码简洁,自动处理资源关闭。
打开TXT文件(读取数据)
读取文本文件需注意字符编码(默认UTF-8)和异常处理。
使用 BufferedReader
(逐行读取)
import java.io.BufferedReader; import java.io.FileReader; import java.io.IOException; public class ReadTxtFile { public static void main(String[] args) { String filePath = "example.txt"; try (BufferedReader reader = new BufferedReader(new FileReader(filePath))) { String line; System.out.println("文件内容:"); while ((line = reader.readLine()) != null) { // 逐行读取 System.out.println(line); } } catch (IOException e) { System.err.println("读取失败: " + e.getMessage()); } } }
使用 Files.readAllLines()
(快速读取小文件)
import java.nio.file.Files; import java.nio.file.Paths; import java.util.List; import java.io.IOException; public class ReadWithFiles { public static void main(String[] args) { String path = "example.txt"; try { List<String> lines = Files.readAllLines(Paths.get(path)); for (String line : lines) { System.out.println(line); } } catch (IOException e) { e.printStackTrace(); } } }
- 适用场景:文件较小时使用(大文件可能内存溢出)。
关键注意事项
-
字符编码
中文或特殊字符需显式指定编码(如UTF-8):// 写入时指定编码 BufferedWriter writer = new BufferedWriter( new OutputStreamWriter(new FileOutputStream("file.txt"), StandardCharsets.UTF_8) ); // 读取时指定编码 BufferedReader reader = new BufferedReader( new InputStreamReader(new FileInputStream("file.txt"), StandardCharsets.UTF_8) );
-
异常处理
必须捕获IOException
,推荐 try-with-resources(自动关闭资源,避免泄漏)。 -
文件路径
- 相对路径:基于项目根目录(如
"data.txt"
)。 - 绝对路径:完整路径(如
"C:/folder/file.txt"
),注意Linux/Windows路径分隔符差异。
- 相对路径:基于项目根目录(如
-
性能优化
- 大文件读写:用
BufferedReader
/BufferedWriter
减少I/O次数。 - 避免
Files.readAllLines()
处理超大文件。
- 大文件读写:用
完整流程示例:保存并读取文件
import java.io.*; public class TextFileDemo { public static void main(String[] args) { // 1. 保存文件 String path = "demo.txt"; saveToFile(path, "测试保存和读取nJava文件操作"); // 2. 读取文件 readFromFile(path); } static void saveToFile(String path, String content) { try (BufferedWriter writer = new BufferedWriter(new FileWriter(path))) { writer.write(content); System.out.println("> 保存成功"); } catch (IOException e) { System.err.println("保存异常: " + e.getMessage()); } } static void readFromFile(String path) { try (BufferedReader reader = new BufferedReader(new FileReader(path))) { System.out.println("> 文件内容:"); String line; while ((line = reader.readLine()) != null) { System.out.println(line); } } catch (IOException e) { System.err.println("读取异常: " + e.getMessage()); } } }
常见问题解决
-
文件不存在?
写入时会自动创建;读取前需检查Files.exists(Paths.get(path))
。 -
乱码问题?
统一使用UTF-8编码,避免系统默认编码差异。 -
权限错误?
检查文件是否被其他程序占用,或Java进程是否有读写权限。
通过 FileWriter
、BufferedReader
等核心类,结合try-with-resources确保安全,即可高效处理文本文件,务必注意编码规范和异常场景,保障代码健壮性。
引用说明:本文代码及规范参考自Oracle官方文档 Java I/O Tutorial 及Java API标准库说明,字符编码遵循UTF-8国际标准(RFC 3629),文件操作符合Java SE规范。
原创文章,发布者:酷盾叔,转转请注明出处:https://www.kd.cn/ask/14304.html