Java liest Textdatei

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.

  1. Java Textdatei lesen mit der Klasse Files
  2. Textdatei in Java mit der Klasse FileReader
  3. Java Textdatei lesen mit der Klasse BufferedReader
  4. 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