Java读取文本文件的完整教程:5种方法与示例代码
在Java中有多种方法可以读取文本文件。下面我们逐一介绍Java读取文本文件的不同方法。
使用Java读取文本文件
在Java中有多种方法可以读取文本文件。文本文件由字符组成,因此我们可以使用Reader类。在Java中还有一些实用类来读取文本文件。
- 使用Files类读取Java文本文件
- 使用FileReader读取Java文本文件
- 使用BufferedReader读取Java文本文件
- 使用Scanner类来读取Java文本文件
现在让我们来看一下使用这些类在Java中如何读取文本文件的示例。
使用java.nio.file.Files来读取文本文件的Java代码
我们可以使用Files类将文件的所有内容读取到一个字节数组中。Files类还有一个方法可以将所有行读取到一个字符串列表中。在Java 7中引入了Files类,如果您希望加载文件的全部内容,那么使用这个类是一个好选择。但是请注意,这个方法只适用于处理小文件并且需要将文件的所有内容存储在内存中。
String fileName = "/Users/scdev/source.txt";
Path path = Paths.get(fileName);
// 将文件内容读取到字节数组中
byte[] bytes = Files.readAllBytes(path);
// 将文件所有行读取到字符串列表中
List<String> allLines = Files.readAllLines(path, StandardCharsets.UTF_8);
使用java.io.FileReader在Java中读取文本文件
你可以使用FileReader来获取BufferedReader,并逐行读取文件。FileReader不支持编码,并且使用系统默认编码,所以在Java中读取文本文件的效率不是很高。
String fileName = "/Users/scdev/source.txt";
File file = new File(fileName);
FileReader fr = new FileReader(file);
BufferedReader br = new BufferedReader(fr);
String line;
while((line = br.readLine()) != null){
// 处理每一行
System.out.println(line);
}
使用java.io.BufferedReader读取Java文本文件
如果你想逐行读取文件并对其进行处理,BufferedReader很适合。它适用于处理大型文件,还支持编码。BufferedReader是同步的,因此可以从多个线程安全地进行读取操作。BufferedReader的默认缓冲区大小为8KB。
String fileName = "/Users/scdev/source.txt";
File file = new File(fileName);
FileInputStream fis = new FileInputStream(file);
InputStreamReader isr = new InputStreamReader(fis, cs);
BufferedReader br = new BufferedReader(isr);
String line;
while((line = br.readLine()) != null){
// 处理每一行
System.out.println(line);
}
br.close();
在Java中使用Scanner类读取文本文件
如果您想按行或基于某些Java正则表达式读取文件,则应该使用Scanner这个类。Scanner使用分隔符模式将输入分解为标记,默认情况下匹配空格。然后,可以使用各种next方法将结果标记转换为不同类型的值。Scanner类不具有同步功能,因此不是线程安全的。
Path path = Paths.get(fileName);
Scanner scanner = new Scanner(path);
System.out.println("使用Scanner读取文本文件");
// 逐行读取
while(scanner.hasNextLine()){
// 处理每一行
String line = scanner.nextLine();
System.out.println(line);
}
scanner.close();
Java读取文件示例
这是一个示例类,展示了如何在Java中读取文本文件。示例方法使用了Scanner、Files、具有编码支持的BufferedReader和FileReader。
package com.Olivia.files;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.List;
import java.util.Scanner;
public class JavaReadFile {
public static void main(String[] args) throws IOException {
String fileName = "/Users/scdev/source.txt";
// 使用Java 7的Files类处理小文件,获取完整的文件数据
readUsingFiles(fileName);
// 使用Scanner类处理大文件,逐行读取
readUsingScanner(fileName);
// 使用BufferedReader逐行读取
readUsingBufferedReader(fileName);
readUsingBufferedReaderJava7(fileName, StandardCharsets.UTF_8);
readUsingBufferedReader(fileName, StandardCharsets.UTF_8);
// 使用FileReader读取,不支持编码,效率不高
readUsingFileReader(fileName);
}
private static void readUsingFileReader(String fileName) throws IOException {
File file = new File(fileName);
FileReader fr = new FileReader(file);
BufferedReader br = new BufferedReader(fr);
String line;
System.out.println("使用FileReader读取文本文件");
while((line = br.readLine()) != null){
// 处理每一行
System.out.println(line);
}
br.close();
fr.close();
}
private static void readUsingBufferedReader(String fileName, Charset cs) throws IOException {
File file = new File(fileName);
FileInputStream fis = new FileInputStream(file);
InputStreamReader isr = new InputStreamReader(fis, cs);
BufferedReader br = new BufferedReader(isr);
String line;
System.out.println("使用InputStreamReader读取文本文件");
while((line = br.readLine()) != null){
// 处理每一行
System.out.println(line);
}
br.close();
}
private static void readUsingBufferedReaderJava7(String fileName, Charset cs) throws IOException {
Path path = Paths.get(fileName);
BufferedReader br = Files.newBufferedReader(path, cs);
String line;
System.out.println("使用BufferedReader Java 7改进版读取文本文件");
while((line = br.readLine()) != null){
// 处理每一行
System.out.println(line);
}
br.close();
}
private static void readUsingBufferedReader(String fileName) throws IOException {
File file = new File(fileName);
FileReader fr = new FileReader(file);
BufferedReader br = new BufferedReader(fr);
String line;
System.out.println("使用BufferedReader读取文本文件");
while((line = br.readLine()) != null){
// 处理每一行
System.out.println(line);
}
// 关闭资源
br.close();
fr.close();
}
private static void readUsingScanner(String fileName) throws IOException {
Path path = Paths.get(fileName);
Scanner scanner = new Scanner(path);
System.out.println("使用Scanner读取文本文件");
// 逐行读取
while(scanner.hasNextLine()){
// 处理每一行
String line = scanner.nextLine();
System.out.println(line);
}
scanner.close();
}
private static void readUsingFiles(String fileName) throws IOException {
Path path = Paths.get(fileName);
// 读取文件到字节数组
byte[] bytes = Files.readAllBytes(path);
System.out.println("使用Files类读取文本文件");
// 读取文件到字符串列表
@SuppressWarnings("unused")
List<String> allLines = Files.readAllLines(path, StandardCharsets.UTF_8);
System.out.println(new String(bytes));
}
}
使用Scanner、BufferedReader或Files来读取文件的选择取决于项目的需求。例如,如果你只是在记录文件,你可以使用Files和BufferedReader。如果你想要根据分隔符解析文件,你应该使用Scanner类。在结束本教程之前,我想提一下RandomAccessFile。我们可以使用它来在Java中读取文本文件。
RandomAccessFile file = new RandomAccessFile("/Users/scdev/Downloads/myfile.txt", "r");
String str;
while ((str = file.readLine()) != null) {
// 输出每一行
System.out.println(str);
}
file.close();
以上就是Java读取文本文件示例程序的全部内容。