Ci sono molti modi per leggere un file di testo in Java. Vediamo uno per uno i diversi metodi per leggere un file di testo in Java.
Lettura di un file di testo in Java
Ci sono molti modi per leggere un file di testo in Java. Un file di testo è composto da caratteri, quindi possiamo utilizzare le classi Reader. Ci sono anche alcune classi di utilità per leggere un file di testo in Java.
- Lettura di un file di testo in Java utilizzando la classe Files
- Lettura di un file di testo in Java utilizzando
FileReader
- Lettura di un file di testo in Java utilizzando la classe BufferedReader
- Utilizzo della classe Scanner per leggere un file di testo in Java
Ora vediamo degli esempi che mostrano come leggere un file di testo in Java utilizzando queste classi.
Java leggi un file di testo utilizzando java.nio.file.Files
Possiamo utilizzare la classe Files per leggere tutti i contenuti di un file in un array di byte. La classe Files ha anche un metodo per leggere tutte le righe in una lista di stringhe. La classe Files è stata introdotta in Java 7 ed è utile se si desidera caricare tutti i contenuti del file. Si dovrebbe utilizzare questo metodo solo quando si lavora su file di piccole dimensioni e si hanno bisogno di tutti i contenuti del file in memoria.
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);
Leggi un file di testo in Java utilizzando java.io.FileReader
Puoi utilizzare FileReader per ottenere BufferedReader e quindi leggere i file riga per riga. FileReader non supporta la codifica e funziona con la codifica predefinita di sistema, quindi non è un modo molto efficiente per leggere un file di testo in Java.
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){
//processa la riga
System.out.println(line);
}
Java leggi un file di testo utilizzando java.io.BufferedReader
BufferedReader è buono se si desidera leggere il file riga per riga e elaborarle. È adatto per l’elaborazione di file di grandi dimensioni e supporta anche la codifica. BufferedReader è sincronizzato, quindi le operazioni di lettura su un BufferedReader possono essere eseguite in modo sicuro da thread multipli. La dimensione predefinita del buffer di BufferedReader è di 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){
//elabora la riga
System.out.println(line);
}
br.close();
Utilizzo dello scanner per leggere file di testo in Java
Se si desidera leggere il file riga per riga o in base a una espressione regolare Java, Scanner è la classe da utilizzare. Scanner suddivide l’input in token utilizzando un modello delimitatore, che per impostazione predefinita corrisponde agli spazi vuoti. I token risultanti possono quindi essere convertiti in valori di diversi tipi utilizzando i vari metodi next. La classe scanner non è sincronizzata e quindi non è thread-safe.
Path path = Paths.get(fileName);
Scanner scanner = new Scanner(path);
System.out.println("Read text file using Scanner");
//leggi riga per riga
while(scanner.hasNextLine()){
//elabora ogni riga
String line = scanner.nextLine();
System.out.println(line);
}
scanner.close();
Esempio di lettura di file Java
Ecco la classe di esempio che mostra come leggere un file di testo in Java. I metodi di esempio utilizzano Scanner, Files, BufferedReader con supporto per la codifica e 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";
//utilizzando la classe Files di Java 7 per elaborare i file di piccole dimensioni, ottenendo i dati completi del file
readUsingFiles(fileName);
//utilizzando la classe Scanner per i file di grandi dimensioni, per leggere riga per riga
readUsingScanner(fileName);
//leggere utilizzando BufferedReader, per leggere riga per riga
readUsingBufferedReader(fileName);
readUsingBufferedReaderJava7(fileName, StandardCharsets.UTF_8);
readUsingBufferedReader(fileName, StandardCharsets.UTF_8);
//leggere utilizzando FileReader, senza supporto per l'encoding, non efficiente
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){
//elaborare la riga
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){
//elaborare la riga
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){
//elaborare la riga
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){
//elaborare la riga
System.out.println(line);
}
//chiudere le risorse
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");
//leggere riga per riga
while(scanner.hasNextLine()){
//elaborare ogni riga
String line = scanner.nextLine();
System.out.println(line);
}
scanner.close();
}
private static void readUsingFiles(String fileName) throws IOException {
Path path = Paths.get(fileName);
//leggere il file in un array di byte
byte[] bytes = Files.readAllBytes(path);
System.out.println("Read text file using Files class");
//leggere il file in una lista di stringhe
@SuppressWarnings("unused")
List allLines = Files.readAllLines(path, StandardCharsets.UTF_8);
System.out.println(new String(bytes));
}
}
La scelta tra l’utilizzo di Scanner, BufferedReader o Files per leggere il file dipende dai requisiti del tuo progetto. Ad esempio, se devi solo registrare il file, puoi utilizzare Files e BufferedReader. Se vuoi analizzare il file in base a un delimitatore, dovresti utilizzare la classe Scanner. Prima di concludere questo tutorial, voglio menzionare RandomAccessFile
. Possiamo utilizzarlo per leggere file di testo in Java.
RandomAccessFile file = new RandomAccessFile("/Users/pankaj/Downloads/myfile.txt", "r");
String str;
while ((str = file.readLine()) != null) {
System.out.println(str);
}
file.close();
Ecco tutto per gli esempi di programmi di lettura dei file di testo in Java.
Source:
https://www.digitalocean.com/community/tutorials/java-read-text-file