有很多种方法可以在Java中读取文本文件。让我们逐一看看Java读取文本文件的不同方法。
Java读取文本文件
在Java中读取文本文件的方法有很多。文本文件由字符组成,因此我们可以使用Reader类。还有一些实用类可用于在Java中读取文本文件。
- 使用Files类在Java中读取文本文件
- 使用
FileReader
在Java中读取文本文件 - 使用BufferedReader读取Java文本文件
- 使用Scanner类在Java中读取文本文件
现在让我们看一下使用这些类读取Java文本文件的示例。
Java 使用 java.nio.file.Files
读取文本文件
我们可以使用 Files 类将文件的所有内容读取到字节数组中。Files 类还有一个方法可以将所有行读取到字符串列表中。Files 类是在 Java 7 中引入的,如果您想要加载文件的所有内容,这是一个不错的选择。只有在处理小文件并且需要将文件的所有内容加载到内存中时,才应该使用这种方法。
String fileName = "/Users/pankaj/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/pankaj/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 使用 java.io.BufferedReader
读取文本文件
BufferedReader很适合逐行读取文件并对其进行处理。它非常适合处理大文件,还支持编码。BufferedReader是同步的,因此可以安全地从多个线程对其进行读取操作。BufferedReader的默认缓冲区大小为8KB。
String fileName = "/Users/pankaj/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("Read text file using Scanner");
//逐行读取
while(scanner.hasNextLine()){
//处理每一行
String line = scanner.nextLine();
System.out.println(line);
}
scanner.close();
Java读取文件示例
以下是一个示例类,展示了如何在Java中读取文本文件。示例方法使用了Scanner、Files、支持编码的BufferedReader和FileReader。
package com.journaldev.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/pankaj/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("Reading text file using 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("Read text file using 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("Read text file using BufferedReader Java 7 improvement");
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("Read text file using 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("Read text file using 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("Read text file using Files class");
//将文件读取到字符串列表中
@SuppressWarnings("unused")
List 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/pankaj/Downloads/myfile.txt", "r");
String str;
while ((str = file.readLine()) != null) {
System.out.println(str);
}
file.close();
以上就是Java读取文本文件示例程序的全部内容。
Source:
https://www.digitalocean.com/community/tutorials/java-read-text-file