Operazioni di
input/Output
Prof. Francesco Accarino
IIS Altiero Spinelli
Via Leopardi 132 Sesto San Giovanni
Input /Output introduzione

Per ottenere delle informazioni un
programma apre un flusso (Stream) su una
sorgente di informazione (la tastiere,un file la
memoria o la rete) e legge le informazioni
come una sequenza di byte
Prof. Francesco Accarino
Operazioni di Input/Output
2

Allo stesso modo un programma può inviare
informazioni ad una destinazione aprendo un flusso
(Stream) su una destinazione di informazione (il
Monitor,un file, la memoria o la rete) e scrivere le
informazioni sequenzialmente.
Prof. Francesco Accarino
Operazioni di Input/Output
3
Package java.io


Il package java.io contiene una vastissima
collezione di oggetti per usare gli stream.
Essi sono catalogati in due gerarchie di
categorie :
Prof. Francesco Accarino
Operazioni di Input/Output
4
Streams di caratteri
Prof. Francesco Accarino
Operazioni di Input/Output
5
Streams di byte
Prof. Francesco Accarino
Operazioni di Input/Output
6
Il package java.io

Flussi di input: hanno una sorgente



Flussi di output: hanno una destinazione




Per dati binari, usare la classe InputStream
Per caratteri, usare la classe Reader
Per dati binari, usare la classe OutputStream
Per caratteri, usare la classe Writer
Tutte queste classi sono nel package
java.io
Per usarle import java.io.*;
Prof. Francesco Accarino
Operazioni di Input/Output
7
Input/output in Java
La classe System Definisce 3 flussi standard
1. in per la tastiera
2. out per il monitor
3. err per gli errori indirizzato ancora sul monitor
Prof. Francesco Accarino
Operazioni di Input/Output
8
System.in:
oggetto di tipo InputStream
Metodi:
 Public Int read(void) throws IOException


Legge un singolo carattere, ritorna il carattere letto o
-1 se si raggiunge la fine dello stream
public int read(char[ ] cbuf, int offset, int length)
throws IOException


Legge lenght caratteri e li memorizza nel buffer cbuf
a partire dall’ indirizzo offset
Ritorna il numero di caratteri letti o -1 se fine stream
Prof. Francesco Accarino
Operazioni di Input/Output
9
System.out:
Oggeto di tipo OutputStream
Metodi:
 Public void print(dato) throws IOException


Dato può essere uno dei tipi primitivi o una stringa o
un oggetto.
public void println(dato) throws IOException

Dato può essere uno dei tipi primitivi o una stringa o
un oggetto. In più va a capo.
Prof. Francesco Accarino
Operazioni di Input/Output
10
Operazioni di Input/Output


Utilizzando gli oggetti InputStream e
OutputStream possiamo fare operazioni
soddifacenti per l’output.
Nelle operazioni di input spesso occorre
leggere una stringa infatti anche un numero
ad esempio 134 èuna stringa costituita dai
singoli caratteri 1 3 e 4 che poi diventeranno
valore numerico mediante conversione .
Prof. Francesco Accarino
Operazioni di Input/Output
11
La classe BufferedReader



Questa classe mette a disposizione dei
metodi per leggere in modo bufferizzato. Cioè
non singoli caratteri ma sequenze di caratteri
terminati da invio.
Questa classe mette a disposizione tra gli
altri il seguente metodo:
public String readLine() throws IOException

Legge una riga d testo
Prof. Francesco Accarino
Operazioni di Input/Output
12
Utilizzare la classe BufferedReader

Bisogna innanzitutto creare un oggetto di tipo
InputStreamReader:



InputStreamReader isr= new InputStreamReader(System.in)
in pratica si crea un oggetto lettore di flusso collegato alla
tastiera (System.in)
BufferedReader bd= new Buffered Reader(isr);
e con il lettore di flusso si crea un lettore bufferizzato
A questo punto sarebbe possibile leggere una linea di testo
String linea;
linea=bd.readLine();
Prof. Francesco Accarino
Operazioni di Input/Output
13
Le Eccezioni
Un eccezione è un comportamento errato o anomalo che si
presenta mentre un programma è in esecuzione.
 Per esempio division by zero (arithmetic exception)
 leggere un numero con la virgola quando ne è previsto uno intero
(number format exception)
 scrivere su un file che non esiste (I/O exception)
 fare riferimento ad un carattere inesistente di una stringa (index
out of bounds exception).
 ………
Java mette a disposizione un sofisticato metodo di gestione di
eventuali mal funzionamenti individuando quando è pssibile una
sorgente di malfunzionamento. In questi casi ci obbliga a gestire
una eccezione mediante un costrutto chiamato try …catch.

Prof. Francesco Accarino
Operazioni di Input/Output
14
Utilizzo di try….. catch

In pratica il concetto può essere spiegato dicendo che dove è
previsto un mal fnzionamento non eseguo l’istuzione ma provo (try)
ad esguirla e se si verifica un mal funzionamento catturo (catch) il
messaggio che java mi invia. In pratica il codice di prima dobbiamo
scriverlo:
String linea;
InputStreamReader isr= new InputStreamReader(System.in);
BufferedReader bd= new Buffered Reader(isr);
try
{
linea = bd.readLine();
}
catch (IOException e)
{
e.printStackTrace();
}
Prof. Francesco Accarino
Operazioni di Input/Output
15
Gestione dell’input output

Per quanto visto precedentemente nella
programmazione java è sempre conveniente
suddividere il proprio programma in almeno
due oggetti:


Un user interface object
Un computational object
Prof. Francesco Accarino
Operazioni di Input/Output
16
Gestione dell’input output
Ad esempio in una applicazione console application la nostra
applicazione potrebbe essere schemtizzata come nella figura
seguente
Prof. Francesco Accarino
Operazioni di Input/Output
17
Esempio di interfaccia di input/output
import java.io.*;
public class IO
{
private BufferedReader reader;
public IO() { reader = new BufferedReader (new InputStreamReader(System.in)); }
public String getTastieraString() { return readTastiera();}
public int getTastieraInteger() { return Integer.parseInt(readTastiera());}
public double getTastieraDouble() { return Double.parseDouble(readTastiera());}
public void display(String s) { System.out.print(s); }
private String readTastiera()
{ String line = "";
try
{ line = reader.readLine(); }
catch (IOException e)
{ e.printStackTrace();}
return line;
}
}
Prof. Francesco Accarino
Operazioni di Input/Output
18