Er zijn veel manieren om een tekstbestand in Java te lezen. Laten we eens kijken naar de verschillende methoden om een tekstbestand in Java te lezen, een voor een.
Java tekstbestand lezen
Er zijn verschillende manieren om een tekstbestand in Java te lezen. Een tekstbestand bestaat uit tekens, dus we kunnen Reader-klassen gebruiken. Er zijn ook enkele hulpprogrammaklassen om een tekstbestand in Java te lezen.
- Java tekstbestand lezen met de Files-klasse
- Tekstbestand lezen in Java met
FileReader
- Java tekstbestand lezen met BufferedReader
- Gebruik van de Scanner-klasse om een tekstbestand in Java te lezen
Laten we nu voorbeelden bekijken die laten zien hoe je een tekstbestand in Java kunt lezen met behulp van deze klassen.
Java leest tekstbestand met behulp van java.nio.file.Files
We kunnen de Files-klasse gebruiken om alle inhoud van een bestand in een byte-array te lezen. De Files-klasse heeft ook een methode om alle regels naar een lijst van strings te lezen. De Files-klasse is geïntroduceerd in Java 7 en het is goed als je alle bestandsinhoud wilt laden. Je moet deze methode alleen gebruiken als je werkt met kleine bestanden en je alle bestandsinhoud nodig hebt in het geheugen.
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);
Lees tekstbestand in java met behulp van java.io.FileReader
Je kunt FileReader gebruiken om de BufferedReader te krijgen en vervolgens bestanden regel voor regel te lezen. FileReader ondersteunt geen codering en werkt met de systeemstandaardcodering, dus het is geen erg efficiënte manier om een tekstbestand in java te lezen.
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){
//verwerk de regel
System.out.println(line);
}
Java leest tekstbestand met behulp van java.io.BufferedReader
BufferedReader is goed als je regel voor regel een bestand wilt lezen en er bewerkingen op wilt uitvoeren. Het is goed voor het verwerken van grote bestanden en het ondersteunt ook codering. BufferedReader is gesynchroniseerd, dus leesbewerkingen op een BufferedReader kunnen veilig worden uitgevoerd vanuit meerdere threads. De standaard buffergrootte van BufferedReader is 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){
//verwerk de regel
System.out.println(line);
}
br.close();
Het gebruik van scanner om tekstbestanden in java te lezen
Als je een bestand regel voor regel wilt lezen of op basis van een java reguliere expressie, is Scanner de klasse om te gebruiken. Scanner breekt zijn invoer in tokens met behulp van een scheidingstekenpatroon, dat standaard overeenkomt met witruimte. De resulterende tokens kunnen vervolgens worden omgezet in waarden van verschillende typen met behulp van de verschillende next-methoden. De scannerklasse is niet gesynchroniseerd en daarom niet threadveilig.
Path path = Paths.get(fileName);
Scanner scanner = new Scanner(path);
System.out.println("Read text file using Scanner");
//lees regel voor regel
while(scanner.hasNextLine()){
//verwerk elke regel
String line = scanner.nextLine();
System.out.println(line);
}
scanner.close();
Voorbeeld van Java-bestandslezen
Hier is het voorbeeld van de klasse die laat zien hoe je een tekstbestand kunt lezen in java. De voorbeeldmethoden maken gebruik van Scanner, Files, BufferedReader met ondersteuning voor codering en 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";
//gebruik de Java 7 Files-klasse om kleine bestanden te verwerken en volledige bestandsgegevens te verkrijgen
readUsingFiles(fileName);
//gebruik de Scanner-klasse voor grote bestanden, om regel voor regel te lezen
readUsingScanner(fileName);
//lees met BufferedReader, om regel voor regel te lezen
readUsingBufferedReader(fileName);
readUsingBufferedReaderJava7(fileName, StandardCharsets.UTF_8);
readUsingBufferedReader(fileName, StandardCharsets.UTF_8);
//lees met FileReader, geen ondersteuning voor codering, niet efficiënt
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){
//verwerk de regel
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){
//verwerk de regel
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){
//verwerk de regel
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){
//verwerk de regel
System.out.println(line);
}
//sluit bronnen
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");
//lees regel voor regel
while(scanner.hasNextLine()){
//verwerk elke regel
String line = scanner.nextLine();
System.out.println(line);
}
scanner.close();
}
private static void readUsingFiles(String fileName) throws IOException {
Path path = Paths.get(fileName);
//lees bestand naar byte-array
byte[] bytes = Files.readAllBytes(path);
System.out.println("Read text file using Files class");
//lees bestand naar lijst met strings
@SuppressWarnings("unused")
List allLines = Files.readAllLines(path, StandardCharsets.UTF_8);
System.out.println(new String(bytes));
}
}
De keuze om de Scanner, BufferedReader of Files te gebruiken om een bestand te lezen, hangt af van de eisen van je project. Bijvoorbeeld, als je alleen het bestand wilt loggen, kun je Files en BufferedReader gebruiken. Als je het bestand wilt parsen op basis van een scheidingsteken, moet je de Scanner-klasse gebruiken. Voordat ik deze tutorial afsluit, wil ik wijzen op RandomAccessFile
. We kunnen dit gebruiken om tekstbestanden in Java te lezen.
RandomAccessFile file = new RandomAccessFile("/Users/pankaj/Downloads/myfile.txt", "r");
String str;
while ((str = file.readLine()) != null) {
System.out.println(str);
}
file.close();
Dat is alles voor de voorbeelden van het lezen van tekstbestanden in Java.
Source:
https://www.digitalocean.com/community/tutorials/java-read-text-file