java怎么使用txt文件内容
- 后端开发
- 2025-08-23
- 6
Java中操作TXT文件是开发过程中常见的需求,包括读取、写入和修改文本内容,以下是详细的实现方法及示例代码:
读取TXT文件的方法
逐行读取(推荐用于大文件)
- 核心类:FileReader + BufferedReader组合,这种方式效率较高且内存友好,适合处理较大的文件。 import java.io.;
public class ReadTextFileLineByLine { public static void main(String[] args) { // 指定文件路径(可根据实际调整) File file = new File("example.txt"); // 替换为你的文件路径 try (FileReader fr = new FileReader(file); BufferedReader br = new BufferedReader(fr)) { String line; while ((line = br.readLine()) != null) { System.out.println(line); // 逐行打印内容 } } catch (IOException e) { e.printStackTrace(); } }
}
优势:按需加载每一行,降低内存消耗;支持实时中断读取过程。
️ 注意:需要手动关闭资源(通过try-with-resources自动管理)。
一次性读取全部内容
- 适用场景:小型文件快速处理,使用NIO包下的Files.readAllLines()或传统IO流均可实现。
- 方案A Java NIO方式(Java 7+): import java.nio.file.;
import java.util.List;
public class ReadEntireFile { public static void main(String[] args) throws IOException { Path path = Paths.get("example.txt"); // Path对象表示文件位置 List<String> lines = Files.readAllLines(path); // 直接获取所有行的集合 for (String l : lines) { System.out.println(l); } }
}
特点:代码简洁,返回值类型为List<String>便于后续遍历或转换。
- 方案B 传统IO流: FileInputStream fis = new FileInputStream("example.txt");
byte[] data = fis.readAllBytes(); // 读取为字节数组
String content = new String(data); // 转为字符串
System.out.println(content);
fis.close();
️对比:NIO性能更优,尤其在多线程环境下;而传统方式兼容性更好(如旧版JDK)。

- 如果文件来自网络而非本地磁盘,可以先建立URL连接获取输入流,再按上述方法解析。 URL url = new URL("http://example.com/data.txt"); InputStream is = url.openStream(); BufferedReader reader = new BufferedReader(new InputStreamReader(is));
- 缓冲区大小调优:创建BufferedReader时传入合适大小的缓冲数组(默认8KB),如处理超大文件可增大至64KB:new BufferedReader(fr, 641024)。
- 批量写入替代单次写入:对于频繁写入场景,积累一定量数据后再执行flush操作,减少磁盘I/O次数。
- 并行处理考量:若需同时读写多个文件,考虑使用线程池管理任务队列,但注意同步机制防止竞态条件。
特殊场景扩展
写入TXT文件的方法
基础写法:追加模式与覆盖模式切换
// 覆盖写入(清空原有内容) try (PrintWriter writer = new PrintWriter("output.txt")) { writer.println("Hello World!"); // 自动添加换行符 writer.write("No newline here"); // 不换行写入 } // 追加模式(保留历史数据) try (FileWriter fw = new FileWriter("output.txt", true)) { fw.append("Appended text...n"); // 在文件末尾添加内容 }
技巧:使用true作为第二个参数可开启追加模式,避免丢失已有数据。


高级控制:格式化输出与编码设置
当涉及非默认编码(如UTF-8)时,显式指定字符集至关重要:
OutputStreamWriter osw = new OutputStreamWriter( new FileOutputStream("chinese.txt"), StandardCharsets.UTF_8); osw.write("中文测试"); // 确保正确保存多语言字符 osw.close();
此方法有效解决乱码问题,特别适用于国际化项目。
常见错误及规避策略
问题类型 典型表现 解决方案 文件不存在 FileNotFoundException 提前检查文件是否存在(file.exists()),或捕获异常后创建新文件 权限不足 AccessDeniedException 修改系统权限/选择其他可写目录 编码不匹配 读写后出现乱码 统一使用StandardCharsets枚举类指定字符集 资源泄漏 程序运行变慢 务必用try-with-resources或finally块关闭流 性能优化建议
FAQs
Q1: 如何选择逐行读取还是一次性加载整个文件?
根据文件体积决定:小于1MB的文件适合用Files.readAllLines();超过此阈值建议采用流式读取(BufferedReader),以避免OutOfMemoryError,例如日志分析系统通常选择逐行处理。
Q2: 遇到中文乱码怎么办?
强制指定UTF-8编码进行读写操作,例如读取时使用new InputStreamReader(new FileInputStream(file), StandardCharsets.UTF_8),写入时同理
- 方案A Java NIO方式(Java 7+): import java.nio.file.;
import java.util.List;
public class ReadEntireFile { public static void main(String[] args) throws IOException { Path path = Paths.get("example.txt"); // Path对象表示文件位置 List<String> lines = Files.readAllLines(path); // 直接获取所有行的集合 for (String l : lines) { System.out.println(l); } }
}