Es gibt viele Möglichkeiten, eine Textdatei in Java zu lesen. Lassen Sie uns nacheinander verschiedene Methoden zum Lesen von Textdateien in Java betrachten.
Java Textdatei lesen
Es gibt viele Möglichkeiten, eine Textdatei in Java zu lesen. Eine Textdatei besteht aus Zeichen, daher können wir Reader-Klassen verwenden. Es gibt auch einige Hilfsklassen zum Lesen einer Textdatei in Java.
- Java Textdatei lesen mit der Klasse Files
- Textdatei in Java mit der Klasse
FileReader
- Java Textdatei lesen mit der Klasse BufferedReader
- Verwendung der Klasse Scanner zum Lesen einer Textdatei in Java
Nun werfen wir einen Blick auf Beispiele, die zeigen, wie man eine Textdatei in Java mit diesen Klassen liest.
Java liest Textdatei mit java.nio.file.Files
Mit der Files-Klasse können wir den gesamten Inhalt einer Datei in ein Byte-Array einlesen. Die Files-Klasse verfügt auch über eine Methode zum Einlesen aller Zeilen in eine Liste von Zeichenfolgen. Die Files-Klasse wurde in Java 7 eingeführt und ist gut geeignet, wenn Sie den gesamten Dateiinhalt laden möchten. Sie sollten diese Methode nur verwenden, wenn Sie mit kleinen Dateien arbeiten und den gesamten Dateiinhalt 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 erhalten und dann Dateien zeilenweise zu lesen. FileReader unterstützt keine Codierung und arbeitet mit der systemeigenen Codierung, daher ist dies keine sehr effiziente Möglichkeit, 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){
// Verarbeiten Sie die Zeile
System.out.println(line);
}
Java liest Textdatei mit java.io.BufferedReader
BufferedReader ist gut, wenn Sie eine Datei zeilenweise lesen und darauf verarbeiten möchten. Es eignet sich gut für die Verarbeitung großer Dateien und unterstützt auch die Codierung. BufferedReader ist synchronisiert, sodass Lesevorgänge auf einem BufferedReader sicher von mehreren Threads ausgeführt werden können. Die Standardpuffergröße von BufferedReader beträgt 8 KB.
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){
//verarbeite die Zeile
System.out.println(line);
}
br.close();
Verwenden von Scanner zum Lesen einer Textdatei in Java
Wenn Sie eine Datei zeilenweise oder basierend auf einem Java regulären Ausdruck lesen möchten, ist die Klasse Scanner die richtige. Scanner zerlegt die Eingabe in Tokens anhand eines Trennmusters, das standardmäßig Leerzeichen entspricht. Die resultierenden Tokens können dann mit den verschiedenen next-Methoden in Werte verschiedener 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");
//zeilenweise lesen
while(scanner.hasNextLine()){
//jede Zeile verarbeiten
String line = scanner.nextLine();
System.out.println(line);
}
scanner.close();
Java-Beispiel zum Lesen einer Datei
Hier ist die Beispielklasse, die zeigt, wie man eine Textdatei in Java liest. Die Beispielmethode verwendet Scanner, Files, BufferedReader mit Codierungsunterstü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";
// Verwendung der Java-7-Files-Klasse zum Verarbeiten kleiner Dateien, um vollständige Dateidaten zu erhalten
readUsingFiles(fileName);
// Verwendung der Scanner-Klasse für große Dateien, um zeilenweise zu lesen
readUsingScanner(fileName);
// Lesen mit BufferedReader, um zeilenweise zu lesen
readUsingBufferedReader(fileName);
readUsingBufferedReaderJava7(fileName, StandardCharsets.UTF_8);
readUsingBufferedReader(fileName, StandardCharsets.UTF_8);
// Lesen mit FileReader, keine Codierungsunterstützung, nicht effizient
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){
// Zeile verarbeiten
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){
// Zeile verarbeiten
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){
// Zeile verarbeiten
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){
// Zeile verarbeiten
System.out.println(line);
}
// Ressourcen schließen
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");
// Zeile für Zeile lesen
while(scanner.hasNextLine()){
// Jede Zeile verarbeiten
String line = scanner.nextLine();
System.out.println(line);
}
scanner.close();
}
private static void readUsingFiles(String fileName) throws IOException {
Path path = Paths.get(fileName);
// Datei in Byte-Array lesen
byte[] bytes = Files.readAllBytes(path);
System.out.println("Read text file using Files class");
// Datei in String-Liste lesen
@SuppressWarnings("unused")
List allLines = Files.readAllLines(path, StandardCharsets.UTF_8);
System.out.println(new String(bytes));
}
}
Die Wahl zwischen der Verwendung eines Scanners oder BufferedReader oder Files zum Lesen einer Datei hängt von den Anforderungen Ihres Projekts ab. Wenn Sie beispielsweise nur die Datei protokollieren, können Sie Files und BufferedReader verwenden. Wenn Sie die Datei anhand eines Trennzeichens analysieren möchten, sollten Sie die Scanner-Klasse verwenden. Bevor ich dieses Tutorial beende, möchte ich etwas über RandomAccessFile
erwähnen. Wir können dies verwenden, um eine 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 war alles für Java-Beispielprogramme zum Lesen von Textdateien.
Source:
https://www.digitalocean.com/community/tutorials/java-read-text-file