Java 读取文本文件
Java 中读取文本文件的方法有很多种。让我们逐一看看 Java 读取文本文件的不同方法。
Java读取文本文件
在 Java 中,有很多方法可以读取文本文件。文本文件由字符组成,因此我们可以使用 Reader 类。Java 中也有一些实用程序类可用于读取文本文件。
- Java使用Files类读取文本文件
- 使用 Java 读取文本文件
FileReader
- Java使用BufferedReader读取文本文件
- 使用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 读取文本文件java.io.FileReader
您可以使用 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){
//process the line
System.out.println(line);
}
Java使用读取文本文件java.io.BufferedReader
如果您想逐行读取文件并对其进行处理,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){
//process the line
System.out.println(line);
}
br.close();
使用扫描仪在 Java 中读取文本文件
如果您想逐行读取文件或基于某些Java 正则表达式读取文件,则可以使用 Scanner 类。Scanner 使用分隔符模式将其输入分解为标记,默认情况下该模式与空格匹配。然后可以使用各种 next 方法将生成的标记转换为不同类型的值。扫描仪类不同步,因此不是线程安全的。
Path path = Paths.get(fileName);
Scanner scanner = new Scanner(path);
System.out.println("Read text file using Scanner");
//read line by line
while(scanner.hasNextLine()){
//process each line
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";
//using Java 7 Files class to process small files, get complete file data
readUsingFiles(fileName);
//using Scanner class for large files, to read line by line
readUsingScanner(fileName);
//read using BufferedReader, to read line by line
readUsingBufferedReader(fileName);
readUsingBufferedReaderJava7(fileName, StandardCharsets.UTF_8);
readUsingBufferedReader(fileName, StandardCharsets.UTF_8);
//read using FileReader, no encoding support, not efficient
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){
//process the line
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){
//process the line
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){
//process the line
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){
//process the line
System.out.println(line);
}
//close resources
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");
//read line by line
while(scanner.hasNextLine()){
//process each line
String line = scanner.nextLine();
System.out.println(line);
}
scanner.close();
}
private static void readUsingFiles(String fileName) throws IOException {
Path path = Paths.get(fileName);
//read file to byte array
byte[] bytes = Files.readAllBytes(path);
System.out.println("Read text file using Files class");
//read file to String list
@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/pankaj/Downloads/myfile.txt", "r");
String str;
while ((str = file.readLine()) != null) {
System.out.println(str);
}
file.close();
这就是java读取文本文件示例程序的全部内容。