Textdatei in Java lesen – Tutorial
Es gibt viele Wege, eine Textdatei in Java zu lesen. Eine Textdatei besteht aus Zeichen, daher können wir Reader-Klassen verwenden. Es gibt auch einige Utility-Klassen, um eine Textdatei in Java zu lesen.
- Java liest Textdatei mit der Files-Klasse
- Textdatei in Java mit FileReader lesen
- Java liest Textdatei mit BufferedReader
- Mit Scanner-Klasse Textdatei in Java lesen
Lassen Sie uns nun Beispiele ansehen, wie man eine Textdatei in Java mit diesen Klassen liest.
Java liest Textdatei mit java.nio.file.Files
Wir können die Files-Klasse verwenden, um alle Inhalte einer Datei in ein Byte-Array zu lesen. Die Files-Klasse hat auch eine Methode, um alle Zeilen in eine Liste von Strings zu lesen. Die Files-Klasse wurde in Java 7 eingeführt und ist gut, wenn Sie alle Dateiinhalte laden möchten. Sie sollten diese Methode nur verwenden, wenn Sie an kleinen Dateien arbeiten und alle Dateiinhalte im Speicher benötigen.
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);
Textdatei in Java mit java.io.FileReader lesen
Sie können FileReader verwenden, um den BufferedReader zu bekommen und dann Dateien Zeile für Zeile zu lesen. FileReader unterstützt kein Encoding und arbeitet mit dem systemeigenen Standard-Encoding, daher ist es keine sehr effiziente Weise, eine Textdatei in Java zu lesen.
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 liest Textdatei mit java.io.BufferedReader
BufferedReader ist gut, wenn Sie Datei Zeile für Zeile lesen und verarbeiten möchten. Es eignet sich gut für die Verarbeitung großer Dateien und unterstützt auch Encoding. BufferedReader ist synchronisiert, daher können Leseoperationen auf einem BufferedReader sicher von mehreren Threads durchgeführt werden. Die Standardpuffergröße des BufferedReader beträgt 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();
Mit Scanner Textdatei in Java lesen
Wenn Sie eine Datei Zeile für Zeile oder basierend auf einem Java-Regular-Expression lesen möchten, ist Scanner die Klasse, die verwendet werden sollte. Scanner unterteilt seine Eingabe in Token, die ein Trennmuster verwenden, das standardmäßig Leerzeichen entspricht. Die resultierenden Token können dann mit den verschiedenen next-Methoden in Werte unterschiedlicher Typen umgewandelt werden. Die Scanner-Klasse ist nicht synchronisiert und daher nicht threadsicher.
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-Beispiel für das Lesen einer Datei
Hier ist die Beispielklasse, die zeigt, wie man eine Textdatei in Java liest. Die Beispielmethoden verwenden Scanner, Files, BufferedReader mit Encoding-Unterstützung und 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 allLines = Files.readAllLines(path, StandardCharsets.UTF_8);
System.out.println(new String(bytes));
}
}
Die Wahl der Verwendung von Scanner, BufferedReader oder Files zum Lesen einer Datei hängt von Ihren Projektanforderungen ab. Zum Beispiel, wenn Sie nur die Datei protokollieren, können Sie Files und BufferedReader verwenden. Wenn Sie die Datei basierend auf einem Trennzeichen parsen möchten, sollten Sie Scanner verwenden. Bevor ich dieses Tutorial beende, möchte ich RandomAccessFile erwähnen. Wir können dies verwenden, um Textdatei in Java zu lesen.
RandomAccessFile file = new RandomAccessFile("/Users/pankaj/Downloads/myfile.txt", "r");
String str;
while ((str = file.readLine()) != null) {
System.out.println(str);
}
file.close();
Das ist alles für Java-Beispielprogramme zum Lesen von Textdateien.