![]() ![]() |
|
![]() ![]() |
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
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 eccezioni di tipo IOException che rappresenta un errore di I/O e sono controllate. Esempio CopyRead.java: stampa su video del contenuto di un file il cui nome viene chiesto all'utente (ad esempio, copyread.txt). Le eventuali IOException vengono catturate e in tal caso viene stampato un messaggio di errore. |
![]() ![]() |
|
![]() ![]() |
Alternativamente si poteva delegare la gestione delle IOException al chiamante, aggiungendo la clausola throws IOException nell'intestazione del metodo main. |
![]() ![]() |
|
![]() ![]() |
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é
non permettono di leggere/scrivere direttamente dati più complessi
come stringhe e numeri. Altre classi di Java forniscono funzionalità di I/O più avanzate, in particolare
|
![]() ![]() |
|
![]() ![]() |
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). |
|
![]() ![]() |
|
![]() ![]() |
CopyPrintWrite.java:
scrive alcuni dati in un file (copyprintwrite.txt).
|
![]() ![]() |
|
![]() ![]() |
Il programma
SommaInteriGoodExceptions.java,
stampa la somma di una sequenza di interi, contenuti uno per linea nel
file integers.txt, con
una ragionevole (ma non ottimale) gestione delle eccezioni.
Due semplici esercizi:
|
![]() ![]() |
|
![]() ![]() |
Abbiamo visto che le IOException sono eccezioni
controllate, e quindi devono essere catturate o delegate al chiamante.
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.
|