java如何读取txt
读取文本文件的常用方法
在Java中,可以通过多种方式读取txt文件内容,以下是几种常见的方法:
使用FileReader和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 br = new BufferedReader(new FileReader(filePath))) {
String line;
while ((line = br.readLine()) != null) {
System.out.println(line);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
使用Files类(Java 7及以上)
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.List;
import java.io.IOException;
public class ReadTxtFile {
public static void main(String[] args) {
String filePath = "example.txt";
try {
List<String> lines = Files.readAllLines(Paths.get(filePath));
for (String line : lines) {
System.out.println(line);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
使用Scanner类
import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;
public class ReadTxtFile {
public static void main(String[] args) {
String filePath = "example.txt";
try (Scanner scanner = new Scanner(new File(filePath))) {
while (scanner.hasNextLine()) {
System.out.println(scanner.nextLine());
}
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
}
处理大文件的优化方法
对于大文件,使用Files.readAllLines可能会消耗较多内存,此时可以改用流式处理:
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.stream.Stream;
import java.io.IOException;
public class ReadLargeTxtFile {
public static void main(String[] args) {
String filePath = "large_file.txt";
try (Stream<String> stream = Files.lines(Paths.get(filePath))) {
stream.forEach(System.out::println);
} catch (IOException e) {
e.printStackTrace();
}
}
}
指定字符编码
如果需要指定字符编码(如UTF-8),可以在读取时明确设置:
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.List;
import java.io.IOException;
public class ReadTxtFileWithEncoding {
public static void main(String[] args) {
String filePath = "example.txt";
try {
List<String> lines = Files.readAllLines(
Paths.get(filePath),
StandardCharsets.UTF_8
);
lines.forEach(System.out::println);
} catch (IOException e) {
e.printStackTrace();
}
}
}
注意事项
- 文件路径可以是绝对路径或相对路径(相对于项目根目录)。
- 使用
try-with-resources语法(如示例中所示)可以自动关闭资源,避免内存泄漏。 - 对于大文件,优先选择流式处理(如
Files.lines或BufferedReader),避免一次性加载全部内容。
以上方法覆盖了从简单到复杂的常见需求,可根据实际场景选择合适的方式。







