lettura da file

Transcript

lettura da file
Lettura e scrittura di file di testo
Linguaggi Java
Lettura e scrittura di file di testo
Per il trattamento dei file di testo Java mette a disposizione la la classe java.io.File che è
una rappresentazione astratta di un file o di una directory e mette a disposizione alcuni
metodi molto utili come sapere se il file esiste, cancellarlo, rinominarlo, ….
Il costruttore della classe File riceve in input una stringa contenente il path del file.
La creazione di un’istanza di File non genera la creazione fisica del file sul disco fisso ma
per crearlo fisicamente occorre chiamare il metodo createNewFile();
I metodi principali della classe File sono i seguenti:

exists() – che restituisce true se il file esiste, false altrimenti.

createNewFile() – che crea effettivamente il file sul disco.

delete() – che elimina il file dal disco.

mkDir() – che permette di creare una directory.

lastModified() – restituisce l’ora dell’ultima modifica
L’accesso ai file si realizza in modo molto simile a quello della lettura di righe da tastiera:
un file di testo infatti è una sequenza di byte che dobbiamo riuscire a guardare come una
stringa utilizzando alcune classi presenti nella libreria java.io.
La classe FileReader ereditata da InputStreamReader è il centro della lettura di un file:
una volta ottenuto un oggetto di tipo InputStreamReader collegato al file, come per la
lettura da tastiera, possiamo creare un oggetto di tipo BufferedReader che può leggere
una riga dal file.
Per leggere da tastiera scriviamo
BufferedReader inp= new BufferedReader (new InputStreamReader(System.in));
invece per leggere un file scriviamo
BufferedReader inFile= new BufferedReader (new FileReader(mioFile));
ove mioFile è un oggetto di tipo File creato passando al costruttore una stringa contenente
il nome del file: se il file non si trova nella stessa cartella della classe che lo legge, il nome
deve essere completo del percorso per raggiungerlo, altrimenti ci sarà una situazione di
errore.
Per leggere tutte le righe di un file è necessario farlo in un ciclo: non è però possibile
conoscere a priori il numero delle righe di un file, ma sappiamo che dopo la lettura
dell’ultima riga continuando a leggere otterremo una riga con valore null, pertanto è
sufficiente testare ogni volta che la riga letta sia != null.
Vediamo ora il codice che dobbiamo scrivere per leggere un file di testo che si trova nella
cartella C:\files\primo.txt
String s, nome=”C:\files\primo.txt”;
File mioFile=new File(nome);
BufferedReader leggiFile;
Fondazione ITS A. Volta – Linguaggi -Java – Flavia Lollis
1
Linguaggi Java
if (!mioFile.exists())
{
System.out.println("il file non c'è: verifica la cartella ed il nome del file");
}
else
{
leggiFile = new BufferedReader(new FileReader(mioFile));
while(true) {
s=leggiFile.readLine();
if(s==null)
break;
System.out.println(s);
}
}
Per scrivere su un file ci si comporta in modo analogo alla scrittura: si utilizza sempre la
classe File, alla quale si deve collegare un BufferedWriter che deve essere costruito con un
FileWriter collegato al file.
Per scrivere poi useremo il metodo
write(stringa)
tenendo presente che ci dobbiamo gestire il carattere per andare a capo \n, che dovremo
aggiungere in testa alla stringa per scrivere in una nuova riga (lacosanon è necessaria
perla prima riga).
Bisogna fare attenzione che se si chiede di scrivere su un file che già esiste, si va a
sovrascriverlo, perdendo così i dati precedentemente inseriti.
Nel caso in cui si vogliano aggiungere delle righe in coda al file, si deve utilizzare un altro
costruttore per la classe FileWriter, passandogli anche un secondo parametro che ha il
significato append=true, il cui significato è che si vuole aggiungere in coda:
FileWriter(mioFile,true)
Vediamo ora il codice necessario per scrivere il file di testo C:\files\primo.txt
String crea="";
if (mioFile.exists())
{
System.out.println("il file esiste già: vuoi sovrascriverlo?si/no/A");
System.out.println("digitando A si aggiungeranno record al file");
crea=tast.readLine();
}
if (crea.equals("SI") || crea.equals("si"))
{
FileWriter fw = new FileWriter(mioFile);
BufferedWriter bw = new BufferedWriter(fw);
bw.write("Questo è il nostro primo file");
bw.write("\nrec1");
bw.write("\nrec2");
bw.close();
Fondazione ITS A. Volta – Linguaggi -Java – Flavia Lollis
2
Linguaggi Java
}
else
{
if (crea.equals("A") || crea.equals("a"))
{
BufferedWriter fw = new BufferedWriter( new
FileWriter(mioFile,true));
fw.write("\nho aggiunto in coda 1");
fw.write("\nho aggiunto in coda 2");
fw.write("ho aggiunto in coda 3");
fw.close();
}
else
{
System.out.println("richiesta scrittura abbandonata");
}
}
}
Fondazione ITS A. Volta – Linguaggi -Java – Flavia Lollis
3