SlideShare a Scribd company logo
1 of 17
Flussi di I/O in java
Package java.io
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()
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;
}
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)
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
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())
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
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)
DataOutputStream
FileOutputStream f=new FileOutputStream(“test.txt”);
DataOutputStream out=new DataOutputStream(f);
(sono disponibili i metodi per scrivere oggetti contenitori e tipi
primitivi:
writeBoolean(), writeByte(), writeDouble(), writeFloat(),
writeChar(), ecc…)
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
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
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
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();
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”);
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
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”);
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.

More Related Content

More from Sergio Ronchi (20)

Java lezione 19
Java lezione 19Java lezione 19
Java lezione 19
 
Java lezione 17
Java lezione 17Java lezione 17
Java lezione 17
 
Java lezione 16
Java lezione 16Java lezione 16
Java lezione 16
 
Java lezione 15
Java lezione 15Java lezione 15
Java lezione 15
 
Java lezione 14
Java lezione 14Java lezione 14
Java lezione 14
 
Java lezione 13
Java lezione 13Java lezione 13
Java lezione 13
 
Java lezione 12
Java lezione 12Java lezione 12
Java lezione 12
 
Java lezione 11
Java lezione 11Java lezione 11
Java lezione 11
 
Java lezione 10
Java lezione 10Java lezione 10
Java lezione 10
 
Java lezione 9
Java lezione 9Java lezione 9
Java lezione 9
 
Java lezione 8
Java lezione 8Java lezione 8
Java lezione 8
 
Java lezione 7
Java lezione 7Java lezione 7
Java lezione 7
 
Java lezione 5
Java lezione 5Java lezione 5
Java lezione 5
 
Java lezione 4
Java lezione 4Java lezione 4
Java lezione 4
 
Java lezione 3
Java lezione 3Java lezione 3
Java lezione 3
 
Java lezione 2
Java lezione 2Java lezione 2
Java lezione 2
 
Java introduzione
Java introduzioneJava introduzione
Java introduzione
 
Java Lezione 1
Java Lezione 1Java Lezione 1
Java Lezione 1
 
Design Patterns
Design PatternsDesign Patterns
Design Patterns
 
Oracle PLSql 4
Oracle PLSql 4Oracle PLSql 4
Oracle PLSql 4
 

Java lezione 6

  • 1. Flussi di I/O in java Package java.io
  • 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)
  • 9. DataOutputStream FileOutputStream f=new FileOutputStream(“test.txt”); DataOutputStream out=new DataOutputStream(f); (sono disponibili i metodi per scrivere oggetti contenitori e tipi primitivi: writeBoolean(), writeByte(), writeDouble(), writeFloat(), writeChar(), ecc…)
  • 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.