0 valutazioniIl 0% ha trovato utile questo documento (0 voti)
136 visualizzazioni
Input Da Tastiera in Java
Il documento descrive come leggere input da tastiera in Java utilizzando gli oggetti System.in, BufferedReader e InputStreamReader. Viene spiegato come convertire i byte letti in stringhe e come gestire le eccezioni durante la lettura.
Scarica in formato PDF, TXT o leggi online su Scribd
0 valutazioniIl 0% ha trovato utile questo documento (0 voti)
136 visualizzazioni
Input Da Tastiera in Java
Il documento descrive come leggere input da tastiera in Java utilizzando gli oggetti System.in, BufferedReader e InputStreamReader. Viene spiegato come convertire i byte letti in stringhe e come gestire le eccezioni durante la lettura.
Scarica in formato PDF, TXT o leggi online su Scribd
Sei sulla pagina 1/ 14
Linput da tastiera in Java
Dott. Ing. M. Banci, PhD
) La lettura di un flusso di input in Java avviene attraverso l'oggetto in della classe System. ) System.in appartiene alla classe InputStream (letteralmente flusso di input) la quale mette a disposizione un unico metodo, chiamato read(), il quale legge e restituisce un byte dallo stream di input (flusso di ingresso). ) Per leggere un numero intero, un numero in virgola mobile, una stringa o qualsiasi altro tipo di dato, necessario eseguire una conversione di tipo. ) Il modo pi comodo e di gran lunga pi utilizzato dai programmatori Java, anche se non particolarmente efficiente, quello di far uso del metodo readLine() messo a disposizione dalla classe BufferedReader. ) BufferedReader una classe dedicata alla lettura di buffers (sequenze di caratteri), che il metodo readLine() restituisce sotto forma di stringhe. ) La classe BufferedReader, a sua volta, deve essere inizializzata fornendo un reader (lettore) di stream di input. Tale lettore rappresentato da un'instanza della classe InputStreamReader. 15 Giugno 2007 Esercitazione Java - 4 2 ) L'utilit di un lettore quella di trasformare la sequenza di byte letti tramite l'oggetto System.in (o generalmente tramite un qualsiasi oggetto di tipo InputStream) in una sequenza di caratteri. Secondo gli standard dello schema Unicode adottato Java infatti, un carattere rappresentato da due byte.
) Cerchiamo di rendere pi chiara la situazione
spiegando una ad una le operazioni che necessario fare per leggere una sequenza di byte da un oggetto di tipo InputStream e trasformarli in una stringa.
15 Giugno 2007 Esercitazione Java - 4 3
) L'oggetto System.in, di tipo InputStream, consente di leggere uno ad uno, una sequenza di byte. ) Trattare con un flusso di byte pu risultare complicato e sicuramente poco pratico. E' molto pi comodo far uso di un lettore bufferizzato in grado di gestire autonomamente un flusso di byte e convertirlo in un flusso di caratteri. Un lettore bufferizzato pu essere creato instanziando un oggetto della classe BufferedStreamReader nel seguente modo:
15 Giugno 2007 Esercitazione Java - 4 4
BufferedStreamReader reader = new BufferedStreamReader (System.in);
) A questo punto faremo uso del lettore
bufferizzato che abbiamo chiamato reader per instanziare un oggetto di tipo BufferedReader. Quest'ultimo mette a disposizione del programmatore il metodo readLine() che consente la lettura di intere stringhe. 15 Giugno 2007 Esercitazione Java - 4 5 Per instanziare un oggetto di tipo BufferedReader scriveremo:
BufferedReader myInput = new
BufferedReader (reader);
Abbiamo cos definito un nuovo oggetto chiamato myInput
sul quale possiamo richiamare il metodo readLine() per leggere una stringa in input dalla tastiera nel seguente modo:
str = new String (myInput.readLine());
15 Giugno 2007 Esercitazione Java - 4 6
) La classe BufferedReader, che abbiamo utilizzato per definire l'oggetto myInput, non una classe dedicata alla lettura di input da tastiera, bens una classe generica con la quale si possono leggere flussi di dati provenienti da varie fonti (file, altri computer collegati in rete...). ) Per questo motivo alcuni dei metodi definiti nella classe BufferedReader, tra cui readLine(), prevedono la possibilit che si possa verificare un malfunzionamento. ) Per malfunzionamento intendiamo ad esempio, la lettura di un file riservato, condizioni di stallo della rete, o in genere una qualsiasi situazione che interrompa il flusso di dati in input.
15 Giugno 2007 Esercitazione Java - 4 7
) Quando si verifica un evento di questo genere, la funzione interessata segnala quanto accaduto all'applicazione principale tramite il lancio di un'eccezione. ) Uneccezione un segnale inviato da un metodo per segnalare qualcosa che non ha funzionato correttamente. Esistono eccezioni diverse per problemi diversi. ) Nel nostro caso, la funzione readLine() pu generare eccezioni di tipo IOException, cio eccezioni riguardanti il sistema di input-output. ) Un'applicazione che faccia uso di una funzione che pu generare eccezioni deve necessariamente essere in grado di gestire le eventuali eccezioni segnalate. ) Il problema viene risolto inserendo queste funzioni in un blocco try - catch
) Sostanzialmente pu essere tradotto in prova ad eseguire istruzione1, se qualcosa va storto allora esegui istruzioniDiRecupero ) Mettiamo insieme quanto detto fino ad ora e vediamo come scrivere un programma che legga una stringa in input dalla tastiera. 15 Giugno 2007 Esercitazione Java - 4 10 import java.io.InputStreamReader; import java.io.BufferedReader ; import java.io.IOException;
public class LeggiStringa {
public static void main (String[] args)
{ InputStreamReader reader = new InputStreamReader (System.in); BufferedReader myInput = new BufferedReader (reader); String str= new String(); try { str = myInput.readLine(); } catch (IOException e) { System.out.println ("Si verificato un errore: " + e); System.exit(-1); } System.out.println ("Hai scritto: "+str); } } 15 Giugno 2007 Esercitazione Java - 4 11 Nel blocco che abbiamo precedentemente chiamato IstruzioniDiRecupero compaiono due istruzioni: 1. visualizza il tipo di eccezione che si verificata 2. termina l'esecuzione del programma richiamando il metodo System.exit(). Il parametro passato al metodo exit() il codice restituito dal processo una volta terminato. Generalmente i processi che terminano correttamente restituiscono zero (0). Il numero -1, restituito in questo caso segnala che il processo terminato in quanto si verificato un errore. Per leggere numeri interi e/o in virgola mobile sufficiente convertire la stringa letta in un numero intero tramite il metodo parseInt(), o in un numero in virgola mobile tramite il metodo parseDouble(), entrambi appartenenti alla classe String.
15 Giugno 2007 Esercitazione Java - 4 12
Convertire stringhe in numeri
int k; k = str.parseInt();
nel primo caso e:
double k; k = str.parseDouble();
15 Giugno 2007 Esercitazione Java - 4 13
)Sar consigliabile prima accertarsi che i dati immessi dall'utente sotto forma di stringa possano essere effettivamente convertiti nel tipo di dato desiderato.