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.

Kostenlosen Account erstellen

Registrieren Sie sich jetzt und erhalten Sie Zugang zu unseren Cloud Produkten.

Das könnte Sie auch interessieren:

centron Managed Cloud Hosting in Deutschland

Mocking Void Methods mit EasyMock

Anleitung, JavaScript
Mocking Void Methods mit EasyMock Im Unit Testing ist Mocking eine essentielle Technik, die Entwicklern ermöglicht, das Verhalten komplexer Objekte zu simulieren. EasyMock ist ein beliebtes Framework zur Erstellung von…