![]() ![]() |
|
![]() ![]() |
Nei programmi sviluppati sino ad oggi abbiamo
usato
Java fornisce classi e metodi per scrivere e leggere dati da files (nel package java.io [locale, Medialab, Sun]). I dati possono essere memorizzati in un file in formato
Queste classi gestiscono I/O di caratteri o bytes da files: per dati più complessi (stringhe, numeri) introdurremo altre classi. Adesso esaminiamo I/O in formato testo, ma quello in formato binario è del tutto analogo. I file di testo possono essere aperti, esaminati e
modificati usando normali editor (es. emacs). Per visualizzarne il
contenuto potete anche usare il comando less della shell di Linux.
|
![]() ![]() |
|
![]() ![]() |
Per leggere dati (un carattere alla volta) da un file, occorre:
I metodi e il costruttore di FileReader possono lanciare una eccezione di tipo IOException che rappresenta un errore di I/O. Queste eccezioni sono controllate, e quindi devono essere previste dal programmatore. Il metodo read() restituisce un intero che può essere:
|
![]() ![]() |
|
![]() ![]() |
CopyRead.java: stampa su video del contenuto di un file (copyread.txt). Le eventuali IOException non vengono gestite dal programma ma rinviate al chiamante. Importante: Cosa succede se non dichiariamo che main può lanciare IOException?
|
![]() ![]() |
|
![]() ![]() |
Per scrivere dati su di un file, occorre:
|
![]() ![]() |
|
![]() ![]() |
Le classi FileReader e FileWriter
forniscono i metodi basici per leggere o scrivere caratteri su file. Non
è conveniente usarle direttamente nei programmi perché:
|
![]() ![]() |
|
![]() ![]() |
CopyPrintWrite.java:
scrive alcuni dati in un file (copyprintwrite.txt).
Si noti come un oggetto FileWriter viene passato al costruttore di BufferedWriter, e a sua volta il nuovo oggetto viene passato al costruttore di PrintWriter.
|
![]() ![]() |
|
![]() ![]() |
La classe BufferedReader fornisce
il metodo readLine() che legge una stringa, ma non ha metodi
per leggere, ad esempio, interi o double.
CopyBufferedRead.java:
stampa su video il contenuto di un file (copyread.txt)
(si confronti con CopyRead.java)
Si può convertire una stringa in un numero usando i metodi statici Integer.parseInt e Double.parseDouble. Si veda come questi metodi sono usati nella classe Input, per realizzare i metodi readInt() e readDouble(). Nota: Integer.parseInt e Double.parseDouble possono generare eccezioni non controllate (di tipo NumberFormatException). |
|
![]() ![]() |
|
![]() ![]() |
Per semplicità, negli esempi visti abbiamo ignorato la gestione delle eccezioni. Un corretto stile di programmazione imporrebbe invece di gestire le eccezioni di I/O che infatti sono eccezioni controllate!
Vediamo alcuni programmi che copiano il contenuto del file inp.txt nel file out.txt, ma che gestiscono le eccezioni in modo via via più raffinato.
Un ultimo esempio:
Due semplici esercizi:
|