在Java编程中,处理TXT文件是一项基础且常见的任务,无论是读取配置文件、解析日志数据,还是导入导出文本格式的内容,都离不开对TXT文件的操作,本文将从多个维度详细解析Java如何查看(读取)TXT文件,涵盖不同的读取方式、适用场景、代码示例及注意事项,帮助开发者全面掌握这一技能。

Java读取TXT文件的常用方法
Java提供了多种读取文件的方式,主要基于字节流(InputStream)和字符流(Reader),根据文件大小、编码格式及性能需求选择合适的方法至关重要,以下是几种主流的实现方式:
使用FileReader和BufferedReader(基础字符流读取)
FileReader是Java.io包中用于读取字符文件的便捷类,但它本身不提供缓冲功能,每次读取都可能直接访问IO设备,效率较低,实际开发中通常会结合BufferedReader使用,通过缓冲机制减少IO操作次数,提升读取性能。
核心步骤:
- 创建File对象,指定文件路径;
- 使用FileReader包装File对象;
- 用BufferedReader包装FileReader,设置缓冲区大小(默认8KB);
- 通过readLine()方法逐行读取文件内容,直至返回null(文件结束)。
示例代码:
import java.io.*;
public class ReadTxtWithBufferedReader {
public static void main(String[] args) {
String filePath = "example.txt";
try (BufferedReader reader = new BufferedReader(new FileReader(filePath))) {
String line;
while ((line = reader.readLine()) != null) {
System.out.println(line);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
注意事项:
- FileReader默认使用系统字符编码(如Windows的GBK、Linux的UTF-8),若文件编码与系统不一致,会出现乱码,需指定编码格式(见后文);
- 使用try-with-resources语句可自动关闭流,避免资源泄漏。
使用InputStreamReader和FileInputStream(指定编码读取)
当TXT文件的编码格式与系统默认编码不同时(如文件为UTF-8编码而系统默认GBK),直接使用FileReader会导致乱码,此时需通过InputStreamReader指定编码格式,结合FileInputStream(字节流)实现正确读取。
核心步骤:
- 创建FileInputStream读取文件字节;
- 用InputStreamStream包装FileInputStream,指定编码(如”UTF-8″);
- 再通过BufferedReader包装InputStreamStream,实现高效读取。
示例代码:
import java.io.*;
public class ReadTxtWithEncoding {
public static void main(String[] args) {
String filePath = "example_utf8.txt";
try (BufferedReader reader = new BufferedReader(
new InputStreamReader(new FileInputStream(filePath), "UTF-8"))) {
String line;
while ((line = reader.readLine()) != null) {
System.out.println(line);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
适用场景:

- 处理非系统默认编码的TXT文件;
- 需要明确指定字符集(如ISO-8859-1、GBK等)时。
使用Files类(Java 7+ NIO方式)
Java 7引入了java.nio.file包(NIO.2),提供了更简洁、强大的文件操作API,Files类支持一次性读取整个文件内容,适合处理小到中等大小的TXT文件。
核心方法:
Files.readAllLines():将文件内容按行读取到List中,适合需要逐行处理的场景;Files.readString()(Java 11+):直接读取整个文件内容为String,适合简单读取。
示例代码(readAllLines):
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.List;
public class ReadTxtWithNIO {
public static void main(String[] args) {
Path path = Paths.get("example.txt");
try {
List<String> lines = Files.readAllLines(path, java.nio.charset.StandardCharsets.UTF_8);
lines.forEach(System.out::println);
} catch (IOException e) {
e.printStackTrace();
}
}
}
示例代码(readString,Java 11+):
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
public class ReadTxtWithNIO11 {
public static void main(String[] args) {
Path path = Paths.get("example.txt");
try {
String content = Files.readString(path, java.nio.charset.StandardCharsets.UTF_8);
System.out.println(content);
} catch (IOException e) {
e.printStackTrace();
}
}
}
优点:
- 代码更简洁,无需手动关闭流;
- 支持直接指定编码,避免乱码问题;
- readAllLines返回的List可直接进行集合操作。
使用Scanner类(灵活分词读取)
Scanner类不仅可以从控制台读取输入,也可以从文件中读取内容,并支持按分隔符(如空格、逗号、换行符等)分词,适合需要解析结构化文本的场景(如CSV、日志文件等)。
核心步骤:
- 创建Scanner对象,传入File或FileInputStream;
- 使用useDelimiter()设置分隔符(默认为空白字符);
- 通过hasNext()和next()方法逐个读取分词结果。
示例代码:
import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;
public class ReadTxtWithScanner {
public static void main(String[] args) {
File file = new File("example.txt");
try (Scanner scanner = new Scanner(file, "UTF-8")) {
while (scanner.hasNextLine()) {
String line = scanner.nextLine();
System.out.println(line);
// 若需按空格分词,可取消下方注释
// String[] words = line.split("\\s+");
// for (String word : words) {
// System.out.println(word);
// }
}
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
}
适用场景:

- 需要按特定分隔符解析文件内容(如日志中的时间戳、错误码等);
- 对读取格式的灵活性要求较高时。
读取TXT文件的注意事项
-
编码问题:
乱码是读取TXT文件时最常见的问题,需确保文件编码与程序指定的编码一致,可通过文本编辑器查看文件编码,或使用工具(如Notepad++的“编码”菜单)转换编码格式。 -
文件路径处理:
- 使用绝对路径时,需注意跨平台兼容性(如Windows用“\”,Linux用“/”);
- 推荐使用相对路径或
Paths.get()构建路径,避免硬编码。
-
异常处理:
文件操作可能抛出FileNotFoundException(文件不存在)、IOException(读取错误)等异常,需合理捕获并处理,避免程序崩溃。 -
资源释放:
流对象(FileReader、BufferedReader等)占用系统资源,必须在使用后关闭,Java 7+的try-with-resources语句可自动管理资源,推荐优先使用。 -
大文件处理:
对于大文件(如超过100MB),避免使用Files.readAllLines()或Files.readString(),以免内存溢出,应采用逐行读取(如BufferedReader)或分块读取方式。
Java读取TXT文件的方法多样,开发者需根据实际需求选择合适的方案:
- 基础逐行读取:BufferedReader + FileReader(适合简单场景,需注意编码);
- 指定编码读取:InputStreamReader + FileInputStream(解决乱码问题);
- NIO方式:Files类(Java 7+,代码简洁,适合中小文件);
- 分词解析:Scanner类(适合结构化文本解析)。
无论采用哪种方式,都需关注编码、路径、异常处理和资源释放等关键问题,确保程序稳定高效运行,通过合理选择和优化,可以轻松实现Java对TXT文件的灵活读取和处理。



















