Ciao e benvenuto in questo articolo dove andremo a scoprire il modo più veloce e semplice per leggere e scrivere del testo su un file.
LEGGERE DA UN FILE DI TESTO
Per leggere dati da un file presente sul disco, possiamo utilizzare, anche in questo caso, la classe Scanner presente nel package java.util insieme alla classe File che rappresenterà il file dal quale andremo a leggere i dati.
La classe File descrive file e cartelle presenti in un file system.
Per esempio se vogliamo leggere i dati da un file di nome inputFile.txt dobbiamo compiere due passaggi:
- Creare un oggetto File:
File file = new File(pathFile);
- Utilizzare tale oggetto per costruire un oggetto di tipo Scanner:
Scanner in = new Scanner(file);
Quest’oggetto Scanner leggerà il contenuto del file di testo (che si trova al path specificato nella variabile String passata per parametro).
Per leggere dati dal file si usano alcuni semplici metodi della classe Scanner.
I metodi principali più utilizzati della classe Scanner sono:
- next() restituisce sotto forma di oggetto di tipo String la successiva parola fornita in ingresso (per parola s’intende una sequenza di caratteri che finisce con una spaziatura)
- nextLine() restituisce sotto forma di oggetto di tipo String la successiva riga fornita in ingresso fin quando non si incontra un carattere di nuova riga o a capo.
- nextInt() restituisce sotto forma di dato di tipo int (numero intero) il numero letto in ingresso
- nextDouble() restituisce sotto forma di dato di tipo double il numero letto in ingresso
- nextLong() restituisce sotto forma di dato di tipo long il numero letto in ingresso
Di questi metodi messi a disposizione della classe Scanner ce ne sono molti altri.
Se vuoi avere una panoramica della vasta gamma di metodi che mette a disposizione la classe Scanner ti invito a visitare la documentazione ufficiale di Java.
Un metodo che non ho citato sopra ma che è molto utile nel caso di uso dei File è il metodo hasNextLine()
Il metodo hasNextLine() restituisce true se ci sono altre righe ancora da leggere nel canale di input dello scanner cioè all’interno del nel nostro file di testo, altrimenti restituisce false.
Ecco un esempio completo di lettura di testo da un file:
import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;
public class InputFile {
public static void main(String[] args) {
//Path della posizione su disco del file di testo che vogliamo leggere in input
String pathFileName= "./folder/inputFile.txt";
File inputFile = new File(pathFileName);
//Creo un oggetto Scanner con fonte di dati il file inputFile.txt
//che si trova all'interno della cartella folder, all'interno del mio progetto Java
Scanner scannerDaFile = null;
try {
scannerDaFile = new Scanner(inputFile);
System.out.println("------------------ STAMPA DEL FILE DI TESTO: "+inputFile.getName()+" ----------------------");
while(scannerDaFile.hasNextLine()) {
System.out.println(scannerDaFile.nextLine());
}
} catch (FileNotFoundException e) {
e.printStackTrace();
}finally {
if(scannerDaFile!=null) {
scannerDaFile.close();
}
}
}
} SCRIVERE IN UN FILE DI TESTO
Per scrivere dati in un file in maniera molto semplice si può utilizzare l’oggetto PrintWriter.
PrintWriter è una classe offerta dalla libreria standard Java ed è presente nel package java.io
Per scrivere dati in un file si costruisce un oggetto di tipo PrintWriter, passandogli come parametro di input il path del file che vogliamo creare:
PrintWriter out = new PrintWriter(“./folder/r_covello.txt “);
Con questo comando andiamo a creare un file di testo con nome r_covello all’interno della cartella folder che è contenuta all’interno del nostro progetto Java.
Se il file specificato nel path esiste già, allora viene svuotato prima di scrivervi nuovi dati.
Se invece il file non esiste viene creato un nuovo file (sempre al path specificato dal parametro del costruttore dell’oggetto PrintWriter).
Con un oggetto di tipo PrintWriter si possono utilizzare i metodi print(), println() per scrivere i dati nel file:
PrintWriter out = new PrintWriter("./folder/r_covello.txt ");
out.print("testo");
out.println("testo più nuova linea");
Il metodo println() scrive nel file il testo passato come parametro e porta il cursore su una nuova riga.
Il metodo print() scrive nel file il testo passato come parametro e lascia il cursore immediatamente dopo l’ultimo carattere scritto (senza andare a capo).
IMPORTANTE: Quando hai terminato di scrivere su un file accertati di chiudere l’oggetto PrintWriter chiamando il metodo close() questa operazione va fatta sempre per evitare la perdita di informazioni.
Vediamo un esempio di scrittura di testo su un file:
import java.io.FileNotFoundException;
import java.io.PrintWriter;
public class OutputFile {
public static void main(String[] args) {
//Path dove si trova il file di testo che vogliamo scrivere in Output
String filePath= "./folder/r_covello.txt";
//Testo che si vuole inserire nel file
String text = "Testo da inserire nel file";
PrintWriter out = null;
try {
out = new PrintWriter(filePath);
out.print(text);
} catch (FileNotFoundException e) {
e.printStackTrace();
}finally {
if(out!=null) {
out.close();
}
}
}
} Adesso di seguito scriviamo un esempio di programma completo che chiederà in input all’utente di inserire un testo da tastiera e lo andrà a scrivere all’interno di un file.
Infine andremo a leggere questo file e a stampare tutto il suo contenuto in output a video.
import java.io.File;
import java.io.FileNotFoundException;
import java.io.PrintWriter;
import java.util.Scanner;
public class TextFileExample {
public static void main(String[] args) {
//Path della posizione su disco del file di testo che vogliamo scrivere in Output
String filePath= "./folder/r_covello.txt";
Scanner scanner = null;
PrintWriter out = null;
try {
//Creo un oggetto Scanner con fonte di dati la tastiera
scanner= new Scanner(System.in);
System.out.println("Fornire frase da salvare su file");
String frase = scanner.nextLine();
out = new PrintWriter(filePath);
out.print(frase);
} catch (FileNotFoundException e) {
e.printStackTrace();
}finally {
if(scanner!=null) {
scanner.close();
}
if(out!=null) {
out.close();
}
}
Scanner scannerDaFile = null;
try {
File inputFile = new File(filePath);
//Creo un oggetto Scanner con fonte di dati la file
scannerDaFile= new Scanner(inputFile);
System.out.println("------------------ STAMPA DEL FILE DI TESTO: "+inputFile.getName()+" ----------------------");
while(scannerDaFile.hasNextLine()) {
System.out.println(scannerDaFile.nextLine());
}
} catch (FileNotFoundException e) {
e.printStackTrace();
}finally {
if(scannerDaFile!=null) {
scannerDaFile.close();
}
}
}
}
P.S. Se vuoi imparare la programmazione anche se parti da zero e non hai nessuna competenza di base senza imparare nessun codice a memoria ACCEDI ORA al mio Corso GRATUITO CLICCANDO QUI.
P.P.S. Se ti è piaciuto questo articolo lascia un commento qui sotto e clicca MI PIACE e CONDIVIDI sulla mia pagina Facebook per avere futuri aggiornamenti.
