2. Classi principali di java.io
InputStream
È una classe astratta base della gerarchia di classi di Input. Ha
due metodi fondamentali read(), close()
OutputStream
È una classe astratta base della gerarchia di classi di Output. Ha
tre metodi fondamentali write(), flush(), close()
3. FileInputStream (Input di File)
FileInputStream in=new FileInputStream(“test.txt”);
int num_ bytes=in.available();
byte Buffer[]=new byte[num_ bytes];
int bytesRead=in.read(Buffer,0,num_bytes);
in.close();
(i vari metodi usati possono generare un IOException)
Da notare anche la classe File: parametro del costruttore FileInputStream
può essere un oggetto File
Il metodo read () può anche leggere un byte per volta ritornado –1 se il
file è finito
byte b,s;
while((b=read())!=-1)
{
s+=b;
}
4. BufferedInputStream
L’input può essere bufferizzato:
FileInputStream f=new FileInputStream(“Test.txt”);
BufferedInputStream in=new BufferedInputStream(f);
…..
in.close();
f.close();
(utilizzando poi i medoti read su BufferedInputStream
come flusso di input si può usare anche System.in)
5. DataInputStream
FileInputStream f=new FileInputStream(“Test.txt”);
DataInputStream in=new DataInputStream(f);
(sono disponibili i metodi per leggere oggetti contenitori e
tipi primitivi:
readBoolean(), readByte(), readDouble(), readFloat(),
readChar(), ecc…)
I metodi readXXX() generano l’eccezione EOFException se il file
è giunto alla fine
6. ObjectInputStream
Permette di leggere degli oggetti da un
flusso di input
FileInputStream f=new FileInputStream(“Test.txt”);
ObjectInputStream in=new ObjectInputStream(f);
(dispone del metodo readObject())
7. FileOutputStream
FileOutputStream out=new FileOutputStream(“test.txt”);
String s=“output su file di testo”;
byte Buffer[]=s.getBytes()
out.write(Buffer);
out.close();
(i vari metodi usati possono generare un IOException)
Il metodo write può anche scrivere in output un byte alla volta
FileOutputStream out=new FileOutputStream(“test.txt”,true);
Permette di andare in append di un file già esistente
8. BufferedOutputStream
L’output può essere bufferizzato:
FileOutputStream f=new FileOutputStream(“test.txt”);
BufferedOutputStream out=new BufferedOutputStream(f);
..
in.close();
out.close()
(utilizzando poi i medoti write su BufferedInputStream)
10. ObjectOutputStream
Permette di scrivere degli oggetti su un flusso di
output
FileOutputStream f=new FileOutputStream(“test.txt”);
ObjectOutputStream in=new ObjectOutputStream(f);
(dispone del metodo writeObject())
Un oggetto può essere scritto su file solo se è
Serializzabile, deve cioè implementare l’interfaccia
Serializable
11. Reader e Writer
Sono simili agli Input e Output stream,
ma sono orientati ai caratteri
Reader:
lettura di caratteri Unicode
Writer:
scrittura di caratteri Unicode
12. InputStreamReader e
BufferedReader
Usato per convertire un flusso di bytes
in caratteri
Per leggere da un flusso di dati una
stringa completa fino all’ Invio
InputStreamReader in=new InputStreamReader(System.in);
BufferedReader inStream=new BufferedReader(in);
String inputLine=inStream.readLine();
Se il file arriva al termine il metodo readLine ritorna null
13. FileReader e FileWriter
Sono sottoclassi di InputStreamReader e OutputStreamWriter:
sono usati in modo esclusivo per l’input output su file di testo.
FileReader f=new FileReader(“test.txt”);
BufferedReader in=new BufferedReader(f);
String s=null;
while((s=in.readLine())!=null)
{
System.out.println(s);
}
in.close();
f.close();
14. PrintStream - PrintWriter
Sono sottoclassi di FileOutputStream
che mettono a disposizione metodi print
e println utilizzabili come
System.out.println().
FileWriter fout=new FileWriter(“pippo.txt”);
PrintWriter out=new PrintWriter(fout);
out.println(“Prova”);
15. File Properties
Sono file di testo con una struttura ben precisa:
url=http://www.google.it
name=user
password=pippo
Possiamo leggere questo file in questo modo:
Properties p=new Properties();
FileInputStream in=new FileInputStream(“dati.dat”);
p.load(in);
p.list(System.out); //stampa su video tutto il contenuto della Properties
String URL=p.getProperty(“url”,”http://localhost”);
//il secondo parametro è il valore di defaut
p.setProperty(“name”,”pluto”);
//per scrivere salvare il file si utilizza
p.store(out,”commento”); //out è un outputstream
16. File Properties
In questo semplice esempio vengono caricare e visualizzate le
proprietà di sistema:
public static void main(String args[]){
Properties sysProp = System.getProperties();
sysProp.list(System.out);
}
Oppure è possibile leggere da un file
Potendo poi fare:
String url=p.getProperty(“jdbc.url”);
17. PipedInputStream /
PipedOutputStream
Attraverso questi Stream è possibile realizzare una
comunicazione asincrona tra due thread. I piped stream
mantengono una coda dei dati inseriti finché il lettore è pronto per
leggerli.
Un PipedInputStream deve comunque essere connesso a un
PipedOutputStream e questo viene realizzato attraverso un
costruttore:
PipedInputStream(PipedOutputStream src)
Analogamente è possibile realizzare il collegamento inverso.