appunti java Capitolo 9 pag. 1

Dimensione: px
Iniziare la visualizzazioe della pagina:

Download "appunti java Capitolo 9 pag. 1"

Transcript

1 appunti java Capitolo 9 pag Input e output Nell informatica classica il concetto di input e output era strettamente legato all uso dei dispositivi esterni di memorizzazione (dischi, nastri) e quindi al concetto di file, al più veniva esteso alla tastiera come dispositivo di input e alla stampante pensata come file di output. La tendenza odierna è quella di separare nettamente i dispositivi dal trattamento dei flussi di dati da e verso di essi. Per questa ragione in Java e in C++ si è fatta la scelta di introdurre astrazioni pensate come oggetti che sono indipendenti dai dispositivi. Si parla quindi di oggetti Stream, Pipe o Filter che sono veri e propri Abstract Data Type dotati di operazioni non dipendenti dai dispositivi Stream, filter, pipe di dati Il significato letterale della parola stream, dal dizionario di inglese, è quello di fiume, torrente o flusso. Nel caso dell informatica il flusso è un astrazione che definisce le modalità (i metodi) di lettura dei token di informazione che fluiscono nello stream di input o dei metodi di scrittura in uno stream di output. Un token è una unità di informazione accessibile è può consistere in un byte, un carattere o un oggetto strutturato. Uno stream o flusso di dati o canale è un percorso di comunicazione tra la sorgente di una certa informazione e la sua destinazione. Sorgente Flusso Destinazione Le sorgenti possono essere le più svariate: la memoria Ram del computer, Internet, un dispositivo permanente di memorizzazione dati, la tastiera ecc. La stessa cosa vale per le destinazioni. La sorgente e la destinazione del flusso di byte sono anche denominati rispettivamente processo produttore e processo consumatore. Non è necessario conoscere in dettaglio la sorgente o la destinazione per leggere un flusso di input o per scrivere in un flusso di output. I metodi generali (oppure i programmi) che operano su una sorgente di dati accettano come argomento un flusso di input, così quelli che scrivono su una destinazione accettano come argomento uno stream di output. Sorgente Flusso di input Metodo o programma che legge dati Metodo o programma che scrive dati Flusso di output Destinazione

2 appunti java Capitolo 9 pag. 2 Oltre ai metodi (o programmi) che fanno uso di stream di I/O esistono anche oggetti detti processori di dati. Un filter (filtro) o processore è un metodo, o un programma, dotato di due argomenti di tipo flusso: legge dati dal flusso di input, li elabora (filtra, seleziona ecc.) e li scrive sul flusso di output. I filtri non necessitano di alcuna informazione, nè riguardo alla sorgente nè riguardo alla destinazione; i filtri richiedono soltanto le modalità di accesso (astratte) al rispettivo flusso. Un filtro può essere rappresentato dalla figura: Flusso di INPUT Filtro o Processore Flusso di OUTPUT Infine esiste un oggetto particolare che prende il nome di pipe o condotto o convogliatore. Il suo ruolo è quello di connettere e sincronizzare un flusso di input con un flusso di output. Non si occupa di trasformare il contenuto dei dati come il filtro. Flusso di INPUT Pipe o condotto Flusso di OUTPUT Queste astrazioni: Sorgente o processo produttore dei dati; Flusso di input; Pipe o condotto; Filtro o processore; Flusso di output; Destinazione o processo Consumatore dei dati consentono di separare logicamente quelle entità, come File e dispositivi di memorizzazione, che nell informatica classica erano considerate legate in modo univoco. È il programmatore che decide quali relazioni costruire tra le diverse entità astratte e tra queste ultime e i dispositivi concreti Flussi di input e output in Java Nel package java.io sono contenute le classi che consentono di gestire le operazioni relative ai flussi. InputStream e Reader sono flussi astratti di input e sono genitori di tutte le classi di input di Java. InputStream (e le sue sottoclassi) tratta flussi di Byte e definisce i modi fondamentali con cui si possono consumare. Reader (e le sue sottoclassi) tratta flussi di Caratteri e definisce i modi fondamentali con cui si possono consumare. Visto che i genitori sono classi astratte, i relativi metodi sono implementati solo nelle sottoclassi della gerarchia.

3 appunti java Capitolo 9 pag. 3 Gli schemi seguenti mostrano la gerarchia, anche se non completa, delle classi essenziali relative al trattamento dei flussi di input InputStream ByteArrayInputStream FileInputStream Reader CharArrayReader StringReader InputStreamReader BufferedReader FileReader Di seguito si riporta la gerarchia, simmetrica a quella di input, delle classi relative ai flussi di output. OutputStream ByteArrayOutputStream FileOutputStream Writer CharArrayWriter StringWriter OutputStreamWriter BufferedWriter FileWriter In prevalenza saranno trattati flussi di tipo carattere (Reader e Writer); gli esempi proposti potranno essere trasformati molto semplicemente per trattare flussi di byte. poiché le sottoclassi relative ai flussi di tipo carattere sono più articolate di quelle relative ai flussi di byte. Dalla gerarchia si nota che il ByteArrayInputStream (sottoclasse di InputStream) ha un corrispondendente in modalità carattere in CharArrayReader (sottoclasse di Reader); analogo parallelo può essere fatto per i flussi di output. Allo stesso modo la sottoclasse FileInputStream ha la corrispondente nella classe FileReader (analogamente per l output). Oltre a CharArrayReader (Writer), in Reader (Writer) sono presenti le sottoclassi StringReader (Writer), BufferedReader (Writer), InputStreamReader (Writer) che rendono più ricca l'elaborazione dei flussi di caratteri. Se si volesse spiegare sinteticamente il funzionamento di un flusso si dovrebbe dire che su questo oggetto sono consentite poche e semplici operazioni: Creare un flusso di input che legge da una sorgente. Creare un flusso di output che scrive su una destinazione. Leggere un carattere (byte). Scrivere un carattere (byte). Leggere un gruppo di caratteri (byte) di dimensione nota.

4 appunti java Capitolo 9 pag. 4 Scrivere un gruppo di caratteri (byte) di dimensione nota. Saltare (skip) in lettura un blocco di caratteri. Chiudere il flusso, liberando lo heap dagli oggetti costruiti. Elenco sommario delle sottoclassi di I/O e dei costruttori e metodi principali. CharArrayReader CharArrayWriter Costruttori CharArrayReader(char[]) Costruttori CharArrayWriter() CharArrayReader(char[],int,int) CharArrayWriter(int) Metodi Metodi int read() void write(int) int read(char[],int,int) void write(char[],int,int) boolean ready() void write(string) long skip(long) void write(string,int,int) void close() void close() String tostring() char[ ] tochararray() StringReader StringWriter Costruttori StringReader(String) StringWriter() StringWriter(int) Metodi IDENTICI a CharArray IDENTICI a CharArray più StringBuffer getbuffer() InputStreamReader Costruttori InputStreamReader(InputStream) OutputStreamWriter OutputStreamWriter(OutputStream) Metodi IDENTICI a CharArray IDENTICI a CharArray FileReader Costruttori FileReader(String) Metodi IDENTICI inputstreamreader FileWriter FileWriter(String) FileWriter(String, boolean) IDENTICI outputstreamwriter BufferedReader BufferedWriter Costruttori BufferedReader(Reader) BufferedWriter(Writer) BufferedReader(Reader, int) BufferedWriter(Writer,int) Metodi IDENTICI a CharArray più IDENTICI a CharArray più String readline() [*] void newline() Dalla tabella si nota che i metodi di ogni classe sono pochi e spesso identici. In particolare si ripetono i metodi di lettura/scrittura di un byte, di un carattere o di

5 appunti java Capitolo 9 pag. 5 una sequenza di caratteri. Solo BufferedReader e BufferedWriter contengono i metodi readline() e newline(), rispettivamente, che intuitivamente consentono di agire non su singoli caratteri o su singoli byte, ma su intere righe Dalla sorgente alla destinazione Si farà uso nel seguito di uno schema astratto, ma semplificato, che pensa ad un programma che legge byte o caratteri come a un processo consumatore. Il programma è immaginato come la destinazione del flusso di input. Si ricorda che la distinzione tra inputstream e Reader si riferisce solo ai token che fluiscono; nel primo si tratta esclusivamente di byte, nel secondo esclusivamente di caratteri. Graficamente rappresenteremo la sorgente, il flusso e il programma (destinazione del flusso) nel modo seguente: Sorgente Tipo di Flusso Flusso Programma Questa rappresentazione grafica consentirà di cogliere sinteticamente le entità coinvolte e le loro relazioni reciproche. Sorgente Costruttore Token del flusso Progr. Destinazione array stringa file X X X X "XXXX" Text Tipo di flusso (cons. di Char) (cons. di Line) tastiera (cons. di Byte) I simboli rappresentano: le sorgenti: array, stringa, file di testo, tastiera ecc; i tipi di flusso costruiti (classe Java utilizzata) per generare il flusso: CharArrayReader (CAR), StringReader(SR), InputStreamReader(ISR), BufferedReader(BR), FileReader (FR); i componenti o token del flusso: Char, Line o Byte; il programma: consumatore dei Token del flusso.

6 appunti java Capitolo 9 pag. 6 Esempio 1. Costruire un programma che consenta di consumare (leggere e stampare sul monitor) un flusso di caratteri la cui sorgente è un array memorizzato nella RAM. Lo schema che rappresenta il programma potrebbe essere il seguente. X X X X CAR (cons. di Char) Nello schema sono indicati: all'estrema sinistra, la sorgente che è un array di caratteri; il costruttore CAR CharArrayReader del flusso, che ha come argomento un array; il flusso ed i relativi token che in questo caso sono dei caratteri; il Programma consumatore o destinatario. public class cap09_es_01 { public static void main(string args[])throws IOException { char[] c={'a','b','c','d','e','f','g'; // sorgente CharArrayReader f_in = new CharArrayReader(c); // costruzione flusso int ch; while ((ch=f_in.read())!=-1) // ciclo di lettura System.out.print((char)ch); System.out.println("\nfine esecuzione."); Esecuzione: Commento al codice: La classe CharArrayReader scelta per la risoluzione è quella più aderente alla sorgente. Infatti il costruttore del flusso accetta come argomento un array di caratteri. Il metodo base per acquisire i caratteri del flusso è read(). Quando con successive letture si giunge al termine dello stream, read() restituisce il codice 1. Se la sorgente non è un array di caratteri ma una stringa, il problema potrebbe essere così riformulato: Esempio 2. Costruire un programma che consenta di consumare (leggere e stampare sul monitor) un flusso di caratteri la cui sorgente è una stringa memorizzato nella RAM. "XXXX" SR (cons. di Char)

7 appunti java Capitolo 9 pag. 7 public class cap09_es_02 { public static void main(string args[])throws IOException { String s="pippo e pluto"; // sorgente StringReader f_in = new StringReader(s); // costruzione flusso int ch; while ((ch=f_in.read())!=-1) // ciclo di lettura System.out.print((char)ch); System.out.println("\nfine esecuzione."); Esecuzione: Commento al codice: La classe StringReader, scelta per la risoluzione, è quella più aderente alla sorgente. Infatti il costruttore del flusso accetta come argomento una stringa. Il metodo base per acquisire i caratteri del flusso è ancora read() fino al termine dello stream. Gli esempi precedenti avevano solo un significato didattico formale. Infatti, se l obiettivo del programma è quello di stampare un array o una stringa, non è necessario operare con uno stream, sarebbe sufficiente un banale programma di stampa. L esempio che segue è più significativo perché per la prima volta mostra come si possano acquisire caratteri dalla tastiera. Esempio 3. Costruire un programma che consenta di consumare (leggere e stampare sul monitor) un flusso di caratteri la cui sorgente è la tastiera ISR (cons. di Char) public class cap09_es_03 { public static void main(string args[])throws IOException { InputStreamReader f_in=new InputStreamReader(System.in); int ch; while ((ch=f_in.read())!='\r') System.out.print((char)ch); System.out.println("\nfine esecuzione."); Commento al codice: La tastiera è individuata in Java da System.in e si tratta, in particolare, di uno stream di Byte. La classe InputStreamReader, scelta per la soluzione, è una classe particolare che fa da ponte tra sorgenti di byte e sorgenti di caratteri. In sostanza InputStreamReader converte una sorgente di byte in una sorgente di caratteri. A conferma di questo si noti che il costruttore del flusso accetta come

8 appunti java Capitolo 9 pag. 8 argomento un oggetto di tipo InputStream (flusso di byte). Il metodo base per acquisire i caratteri dal flusso è ancora read(). Si noti che in questo caso il ciclo di acquisizione di caratteri è interrotto (non dal codice 1 che indica la fine dello stream) dal codice \r che corrispondere alla pressione del tasto di INVIO. Il programma acquisisce solo una riga di caratteri fino alla pressione del tasto di invio. Se si volessero acquisire più righe, invece di una sola, si potrebbe condizionare la fine dell acquisizione alla lettura di un carattere convenzionale come per esempio # nel modo seguente: while ((ch=f_in.read())!='#') invece di while ((ch=f_in.read())!='\r') in questo caso si acquisirebbero da tastiera tutte le righe desiderate fino a quando non si immette il carattere convenzionale #. Esempio 4. Costruire un programma che consenta di consumare (leggere e stampare sul monitor) un flusso di caratteri la cui sorgente è un file di testo memorizzato su disco. Text FR (cons. di Char) public class cap09_es_04 { public static void main(string args[])throws IOException { FileReader f_in = new FileReader("c:/mio.txt"); int ch; while ((ch=f_in.read())!=-1) { System.out.print((char)ch); System.out.println("\nfine esecuzione."); Esecuzione: Il file, come mostra la finestra di output, contiene le cinque righe che sono stampate prima del messaggio di <fine esecuzione.> Commento al codice: La classe FileReader, scelta per la soluzione, è quella più aderente alla sorgente. Infatti il costruttore del flusso esige come argomento una stringa che deve rappresentare il nome di un file su disco.

9 appunti java Capitolo 9 pag Flussi e Filtri Fino a questo momento i quattro esempi sviluppati hanno utilizzato quattro delle cinque classi di input illustrate nello schema del gruppo Reader. La quinta BufferedReader più che una classe generatrice di flussi di input è un filtro; infatti il suo costruttore esige come parametro un flusso di tipo Reader e costruisce un flusso bufferizzato organizzato in linee. Uno schema che ne rappresenti il funzionamento potrebbe essere il seguente: flusso di caratteri o Reader Buffered Reader Flusso bufferizzato in linee (cons. di Char o Line) Si nota che lo schema mostra che BufferedReader può essere pensato come il generatore di un oggetto che ha come parametro di input un flusso e che restituisce in output un flusso organizzato in linee che viene messo a disposizione come flusso di input del programma consumatore. Questo risponde alla definizione di Filtro in quanto da un flusso di caratteri si può ottenere un flusso modificato organizzato in linee di testo con marcatori di fine linea (\r o \n). esempio 5. assegnata una sorgente di tipo array di caratteri che contenga anche marcatori di fine linea (\r o \n), si desidera realizzare un programma che consumi i dati in forma di flusso di input acquisendo le singole righe del testo e stampandole numerate progressivamente. Lo schema mostra graficamente la relazione tra sorgente e flussi coinvolti: X X X X CAR BR Flusso di Linee (cons. di Linee) public class cap09_es_05 { public static void main(string args[])throws IOException { char[]c={'p', r,'i','m', a,'\n','s','e','c','o','n', d, a,'\n'; CharArrayReader f_in = new CharArrayReader(c); BufferedReader in=new BufferedReader(f_in); String s=" "; int n=0; while ((s=in.readline())!=null) { n=n+1; System.out.println(n+ : +s); System.out.println("\nfine esecuzione."); Esecuzione: 1: prima 2: seconda fine esecuzione.

10 appunti java Capitolo 9 pag. 10 Commento al codice: Notare che l array contiene caratteri i marcatori, indifferentemente \r o \n. Si costruisce prima il flusso di caratteri CharArrayReader che viene passato in input (come parametro del costruttore) a BufferedReader che costruisce il flusso Bufferizzato che sarà letto dal programma con il metodo readln() non presente nelle altre classi flusso. Il ciclo di lettura si interrompe quando la stringa in lettura è null. Il programma precedente può essere di maggior interesse se applicato ad un file di testo memorizzato su disco. esempio 6. realizzare un programma che legga un file di testo e stampi le singole righe numerandole progressivamente. La figura evidenzia che si può costruire un flusso di caratteri utilizzando FileReader e quindi filtrarlo con BufferedReader per ottenere il flusso di linee desiderato. Text FR BR Flusso di Linee (cons. di Linee) public class cap09_es_06 { public static void main(string args[]) throws IOException { FileReader f_in = new FileReader("c:/mio.txt"); BufferedReader in=new BufferedReader(f_in); String s=" ";int n=0; while ((s=in.readline())!=null) { n=n+1; System.out.println(n+ : +s); System.out.println("\nfine esecuzione."); Commento al codice: Il file stampato è identico a quello dell esempio 4, la novità consiste nel fatto che la condizione di fine ciclo è fondata, come quella dell array precedente, sulla presenza dei marcatori di fine linea nel file di testo e quindi sul fatto che readline() restituisce null. Si costruisce prima il flusso di caratteri FileReader che viene passato in input (come parametro del costruttore) a BufferedReader che costruisce il flusso Bufferizzato che sarà letto dal programma con il metodo readln() non presente nelle altre classi flusso.

11 appunti java Capitolo 9 pag Flussi di Output con le classi Writer Si affronteranno ora alcuni esempi di utilizzo di flussi di output mostrando la simmetria esistente rispetto ai flussi di input. esempio 7. realizzare un programma che generi in sequenza i caratteri e li depositi su un flusso di output indirizzato ad una destinazione di tipo array di caratteri. Al termine stampi l array destinazione. (prod. di Char) CAW X X X X public class cap09_es_07 { public static void main(string args[])throws IOException { CharArrayWriter out=new CharArrayWriter(); // (1) flusso do output for (int i=0; i<=9; i++) { String s=""+i; // trasforma il numero in stringa char ch=s.charat(0); // da stringa a carattere out.write(ch); // (2) scrive nel flusso char[] c=out.tochararray(); // (3) da flusso ad array di char System.out.println("il flusso di output contiene:"); for (int i=0; i<c.length; i++) System.out.print(c[i]); System.out.println("\nfine esecuzione."); Esecuzione: il flusso di output contiene: fine esecuzione. Commento al codice: La nota (1) mostra il costruttore del flusso. La (2) il metodo di scrittura di un carattere nel flusso di output. La (3) la trasformazione del flusso in un array destinazione. Si affronteranno due esempi più interessanti, il primo genera un file di testo in output scrivendo su di esso alcune stringhe, il secondo lo genera acquisendo l input dalla tastiera. esempio 8. realizzare un programma che generi un file di testo inserendo su ogni riga del file una parola contenuta in un array di stringhe. Lo schema grafico rappresentativo degli stream è il seguente:

12 appunti java Capitolo 9 pag. 12 (prod. di Stringhe) FW Text public class cap09_es_08 { public static void main(string args[])throws IOException { FileWriter out=new FileWriter("c:/out.txt"); // (1) String s[]={"pera","banana","fico","mela"; for (int i=0; i<s.length; i++) out.write(s[i]+'\n'); // (2) out.close(); // (3) /* verifica e stampa del file generato */ System.out.println("il flusso di output contiene:"); FileReader in=new FileReader("c:/out.txt"); int ch; while ((ch=in.read())!= -1) System.out.print((char)ch); System.out.println("\nfine esecuzione."); Esecuzione: il flusso di output contiene: pera banana fico mela fine esecuzione. Commento al codice: La nota (1) mostra il costruttore di FileWriter, la (2) la scrittura di una stringa sul file seguita dal marcatore \n di newline. La nota (3) evidenzia la necessità di chiudere il file di output per poter salvare i dati prima di riaprirlo per la lettura e la stampa di verifica. esempio 9. realizzare un programma che generi un file di testo inserendo su ogni riga una riga di testo acquisita da tastiera. Il programma termina quando da tastiera si immette una riga vuota. Lo schema grafico rappresentativo degli stream è il seguente: Flusso di Linee Flusso di Linee ISR BR (cons. di Linee e produtt. di linee) FW BW Text

13 appunti java Capitolo 9 pag. 13 public class cap09_es_09 { public static void main(string args[])throws IOException { InputStreamReader f_in=new InputStreamReader(System.in); // (1) BufferedReader in=new BufferedReader(f_in); // (2) FileWriter f_out=new FileWriter("c:/out.txt"); // (3) BufferedWriter out=new BufferedWriter(f_out); // (4) String s=" "; while (s.length()!=0) { // (5) s=in.readline(); // (6) out.write(s); // (7) out.newline(); // (8) out.close(); // (9) /* verifica e stampa del file generato */ System.out.println("\nil flusso di output contiene:"); FileReader new_in=new FileReader("c:/out.txt"); int ch; while ((ch=new_in.read())!= -1) System.out.print((char)ch); System.out.println("\nfine esecuzione."); Commento al codice: Si tratta evidentemente di un programma di INPUT/OUTPUT in quanto dopo la lettura di ogni linea dalla tastiera la trascrive nel file. Lo schema grafico mostra la necessità di costruire un ISR flusso di caratteri, vedi nota (1) del codice. Si filtra il flusso di input da tastiera attraverso un BR, nota (2) del codice, per ottenere un flusso organizzato in linee. Le note (3) (4) mostrano il costruttore di FileWriter, intermediario necessario per ottenere un output bufferizzato BW per la scrittura di intere righe nel file. Le note (5),(6),(7) e (8) mostrano rispettivamente, la condizione di interruzione della lettura da tastiera quando la riga di input è vuota (s.length()==0), la lettura della linea di input dal BR, la scrittura della stringa sul buffer del file e infine il newline necessario.

14 appunti java Capitolo 9 pag Un filtro interessante StreamTokenizer Un filtro molto utile per analizzare e selezionare token di uno stream di caratteri è lo StreamTokenizer. Questo filtro consente di separare con estrema semplicità diversi tipi di gettone (token) presenti nel flusso di input. Si possono isolare le parole formate da soli caratteri alfabetici (WORD), i token numerici (NUMBER) separandole da caratteri di punteggiatura o altro. Il filtro funziona identificando i caratteri separatori che di norma sono SPAZI, fine linea EOL o fine file EOF. Nella tabella sono riportatati sinteticamente campi, costruttori e metodi: StreamTokenizer NOTE Costruttori StreamTokenizer(Reader) L imput dello streamtokenizer e un oggetto Reader. In particolare se si legge da tastiera si può usare un InputStreamReader, se si legge da un file di testo è necessario passare da FileReader ecc. Attributi o Campi Metodi double nval String sval static int TT_EOF static int TT_EOL static int TT_NUMBER static int TT_WORD int ttype void commentchar(char) void eolissignificant() int lineno() void lowercasemode(boolean) int nexttoken() void ordinarychar(int) void ordinarychars(int, int) void wordchars(int, int) void quotechar(int, int) void whitespacechars(int, int) void slashslashcomments(boolean) void slashstarcomments(boolean) Campo che contiene il token di tipo NUMBER, trasformato in double dopo l isolamento del Token. Dopo l operazione di lettura a.nexttoken(); se a.ttype==a.tt_number allora si può acquisire il valore double a.nval. Campo che contiene, come nel caso precedente, il token do tipo WORD. La costante che indica che nexttoken() ha incontrato il fine file. Ad esempio if (a.ttype==a.tt_eof) Analogo al precedente. Analogo al precedente. Analogo al precedente. Campo che contiene informazioni relativamente al tipo di token isolato dopo una lettura a.nexttoken(). E possibile chiedersi SE a.ttype==a.tt_word oppure stampare il carattere (char)a.ttype Definisce quali caratteri debbano essere interpretati come un commento. Decreta che il marcatore di fine linea deve essere individuato e non tralasciato dal filtro. Restituisce il numero di riga del token letto. Se boolean è true, prima di analizzare i token li trasforma tutti in lettere minuscole. Legge il token successivo dello stream e restituisce un intero che rappresenta il ttype (tipo di token). Definisce il o l intervallo dei caratteri ordinari che non sono ne NUMBER ne WORD ne COMMENT ne SPACE ne EOL ne EOF. Definisce l intervallo dei caratteri che appartengono a un WORD. Per default sono i caratteri alfabetici. Definisce i caratteri che identificano una costante stringa. Definisce i caratteri che separano i Token. Definisce i caratteri che individuano commenti (che ST tralascia nell analisi) in C e C++ e Java /* */ oppure //

15 appunti java Capitolo 9 pag. 15 esempio 10. partendo da una stringa che contenga parole numeri e caratteri vari filtrarla con uno StreamTokenizer per stampare in modo separato i vari token indicando a fianco di ognuno di che cosa si tratta. Se utilizziamo gli schemi introdotti per indicare flussi e filtri si potrebbe indicare la sequenza del programma con il seguente schema grafico: stringa "XXXX" SR Flusso di Token ST (cons. di Token) Lo schema mostra che dalla stringa sorgente si deve costruire con StringReader (SR) un flusso (Reader) necessario per costruire il filtro StringTokenizer (ST). Questo restituisce in output un flusso filtrato di Token che il programma consumerà per produrre gli effetti desiderati. class cap09_es_10 { public static void main(string arg[]) throws IOException { String s="parola (1) sono un numero 2.55?? una costante 2001 "; StringReader f_char=new StringReader(s); // (1) StreamTokenizer st=new StreamTokenizer(f_char); // (2) st.nexttoken(); // (3) while (st.ttype!=st.tt_eof) { // (4) if(st.ttype==st.tt_word) // (5) System.out.println("WORD:"+st.sval); // (6) else if(st.ttype==st.tt_number) // (7) System.out.println("NUM:"+st.nval); // (8) else if (st.sval==null) // (9) System.out.println("CHAR:"+(char)st.ttype); // (10) else System.out.println("OGGETTO di tipo "+st.ttype+" :"+st.sval); // (11) st.nexttoken(); Esecuzione: WORD:parola CHAR:( NUM:1.0 CHAR:) WORD:sono WORD:un WORD:numero NUM:2.55 CHAR:? CHAR:? WORD:una WORD:costante OGGETTO di tipo 39:2001

16 appunti java Capitolo 9 pag. 16 Commenti al codice: Le note (1) e (2) mostrano la costruzione dei flussi indicati nello schema. La (3) indica l invocazione del metodo che stacca il primo Token. La nota (4) evidenzia che il ciclo di estrazione dei Token ha termine quando si incontra il Token TT_EOF (costante predefinita in StreamTokenizer che indica la fine del flusso). Le note da (5) a (11) mostrano come si testano e si stampano i diversi token utilizzando il campo ttype di ogni token che informa a quale tipo appartiene il gettone attualmente in lettura. I tipi sono WORD, NUMBER, TT_EOF ecc. Se il tipo è null significa che si tratta di un singolo carattere di punteggiatura. Il metodo st.nexttoken() presente nell ultima riga del ciclo fa avanzare il puntatore al prossimo tokem dello stream. esempio 11. Si desidera realizzare un programma che stampi l intero file di testo c:/mio.txt memorizzato su disco e successivamente tutti e solo i token WORD che contiene. Richieste: Passare il FileReader ad un BufferedReader al fine di stampare le righe del file; quindi riaprire il FileReader e assegnarlo come input a StreamTokenizer per stampare i soli WORD secondo lo schema grafico seguente. Lo schema mostra che pur trattandosi di un unico codice questo può essere pensato come una coppia di programmi indipendenti che nel caso specifico sono eseguiti una dopo l altro. Il primo stampa semplicemente il file di testo, il secondo mostra come vengono estratti dal file i soli token di tipo WORD. Text Flusso di Linee FR BR (cons. di Linee) FR Flusso di Token ST (cons. di Token) class cap09_es_11 { public static void main(string arg[]) throws IOException { FileReader f_char=new FileReader("c:/mio.txt"); // (1) BufferedReader f_line=new BufferedReader(f_char); // (2) System.out.println("Le righe nel file sono:"); String s=" "; while ((s=f_line.readline())!=null) System.out.println(s); f_char=new FileReader("c:/mio.txt"); // (3) StreamTokenizer st=new StreamTokenizer(f_char); // (4) System.out.println("\nLe sole parole sono:"); st.nexttoken(); // (5) while (st.ttype!=st.tt_eof) { if(st.ttype==st.tt_word) System.out.print(st.sval+" "); st.nexttoken(); System.out.println("\nFine scansione.\n");

17 appunti java Capitolo 9 pag. 17 Esecuzione: Le righe nel file sono: prima riga numero 1234 anno "2001" // commento non analizzato NUMERO 3.32 Le sole parole sono: prima riga numero anno NUMERO Fine scansione. Commenti al codice: Le note (1) e (2), unite al primo ciclo di stampa. si riferiscono alla costruzione del flusso di input FileReader (FR) che opera sul file di testo, questo flusso viene filtrato dal successivo BufferedReader (BR) per consentire la stampa per linee del testo e consumare il flusso. Le note (3) (4) mostrano la sequenza di costruzione del FileReader che diviene input di StreamTokenizer. Infine si avvia la lettura del primo token evidenziato dalla nota (5). Le istruzioni successive consistono nel ciclo del programma che consuma i token e stampa solo i WORD che sono quelli desiderati. esempio 12. Si desidera realizzare un programma che stampi tutti e soltanto i token numerici di un file di testo memorizzato su disco con a fianco il numero di riga del file su cui il token è scritto. class cap09_es_12 { public static void main(string arg[]) throws IOException { FileReader f_char=new FileReader("c:/mio.txt"); // (1) StreamTokenizer st=new StreamTokenizer(f_char); // (2) System.out.println("I numeri contenuti nel file sono:"); st.nexttoken(); // (3) while (st.ttype!=st.tt_eof) { if(st.ttype==st.tt_number) System.out.println(st.nval+" riga:"+st.lineno()); st.nexttoken(); System.out.println("\nFine scansione file."); Esecuzione: I numeri contenuti nel file sono: riga: riga:5 Fine scansione file. Commenti al codice: Il programma non differisce dalla seconda parte del precedente esempio 11 con le uniche differenze che in questo caso si stampano solo i Token NUMBER e a fianco il numero di riga su cui questi sono memorizzati. Il metodo st.lineno() è utilizzato proprio al fine di estrarre i numeri di riga del token in esame.

18 appunti java Capitolo 9 pag E Esercizi Problemi che usano stream o filtri in modo elementare. Uso delle sottoclassi di InputStream, OutputStream, Reader e Writer per risolvere problemi Si desidera costruire un programma che acquisisca da un array di caratteri le singole lettere utilizzando un opportuno stream e stampi solo le vocali. Richieste: realizzare il solo main() scegliendo il corretto costruttore di stream. Nota: il metodo che testa se un carattere è contenuto nell insieme delle vocali potrebbe essere il seguente appartenente alla classe String. String Voc= aeiou ; char ch= a ; if ((Voc.indexOf(ch))!=-1) 9.2. Si desidera costruire un programma che acquisisca da una stringa le singole lettere utilizzando un opportuno stream e le collochi in un StringBuffer ponendo al termine di ogni sequenza di cinque caratteri il marcatore \n e infine stampi il buffer ottenuto. Richieste: realizzare il solo main() scegliendo il corretto costruttore di stream Si desidera costruire un programma che acquisita da tastiera una sequenza di linee fino a quando non si immette il marcatore #. Trasferisca le linee acquisite in un StringBuffer eliminando i marcatori di fine linea \n, \r ; infine stampi il testo del Buffer ottenuto. Richieste: realizzare il solo main() scegliendo il corretto costruttore di stream Si desidera costruire un programma che acquisita dati da un array di caratteri assegnato dall utente, l array contiene anche marcatori di fine linea \n ; i dati acquisiti li scriva utilizzando un opportuno stream di output in un file di testo memorizzato su disco. Richieste: realizzare il solo main() utilizzando il costruttore FileWriter per lo stream di output Si desidera costruire un programma che acquisita da una stringa assegnata dall utente i caratteri e li trascriva in sequenze di cinque caratteri su ogni riga di un file di testo inserendo l opportuno marcatore di fine linea. Richieste: realizzare il solo main() scegliendo il/i corretto/i costruttore/i di stream di output Si desidera costruire un programma che acquisita da un file di testo memorizzato su disco le diverse linee e le riscriva su un nuovo file di testo in in sequenze di cinque caratteri su ogni riga di testo inserendo l opportuna marcatore di fine linea. Richieste: realizzare il solo main() scegliendo i corretti costruttori di stream di input e output. Problemi semplici che usano stream di I/O e la classe StreamTokenizer Si desidera costruire un programma che filtri un file di testo memorizzato su disco e stampi di fianco a ogni parola la riga su cui si trova. Richieste: realizzare il solo main() facendo uso del filtro StreamTokenizer Si desidera costruire un programma che Dopo aver acquisito una parola da ricercare, filtri un file di testo memorizzato su disco e stampi quante volte ricorre la parola nel testo. Richieste: realizzare il solo main() facendo uso del filtro StreamTokenizer Si desidera costruire un programma che Dopo aver acquisito una parola da ricercare, filtri un file di testo memorizzato su disco e stampi su quali righe si trova quella parola. Richieste: realizzare il solo main() facendo uso del filtro StreamTokenizer.

19 appunti java Capitolo 9 pag Si desidera costruire un programma che Filtri un file di testo memorizzato su disco che contiene esclusivamente numeri separati da spazi e stampi la somma algebrica dei numeri trovati. Richieste: realizzare il solo main() facendo uso del filtro StreamTokenizer. Problemi la cui soluzione richiede la progettazione di una a più classi senza Frame o GUI Si desidera costruire un programma che usi un flusso qualsiasi di caratteri di input e mostri il testo completo sulla console in output." Indicazioni: il flusso da cui provengono i caratteri è un generico Reader (a seconda delle necessità il dispositivo potrà essere uno StringBuffer, una Strimg, un Array o un File di caratteri, la Tastiera). Si tratta quindi di progettare una Classe. (Chi fa che cosa?) la Classe, chiamiamola, Leggi_mostra avrà un costruttore generico di tipo Reader e disprrà di almeno un metodo leggi() che acquisisce dallo stream i caratteri per costruire una Stringa (che deve essere memorizzata negli attributi), e un secondo metodo che mostra() la stringa su console. Leggi_mostra - Reader flusso; - String testo; +Leggi_mostra(Reader in) +String leggi() +void mostra() Richieste: implementare la classe e un main di prova per verificare i due metodi al variare dello stream reader associato Si desidera costruire un programma che analizzi un flusso qualsiasi di caratteri e consenta di sapere se il testo contiene token numerici e/o token di tipo word" Indicazioni: I casi d'uso potrebbero essere i seguenti: costruttore del Filtro (quali parametri?). realizzare una funzionalità (metodo?) che risponda alla domanda quanti_num(); realizzare una funzionalità (metodo?) che risponda alla domanda quante_par() opzionalmente: dammi_num() Filtro() dammi_par() quanti_num() quante_par() Il flusso sarà un generico Reader (a seconda delle necessità il dispositivo potrà essere uno StringBuffer, una Strimg, un Array o un File di caratteri, la Tastiera). L'analisi del flusso verrà eseguita utilizzando uno StreamTockenizer. Si tratta quindi di progettare una Classe Filtro. (Chi fa che cosa?)

20 appunti java Capitolo 9 pag. 20 Rischieste: o Disegnare (diagramma di classe) la classe Filtro; o Codificare la Classe e un main() di prova che verifichi le funzionalità realizzate; Problemi la cui soluzione richiede la progettazione di una a più classi con l'uso di una Frame ed eventi GUI Si desidera costruire un programma che analizzi (filtri) un testo contenuto in un campo di una frame e mostri le elaborazioni in un secondo campo della frame alla pressione dell'opportuno pulsante." Richieste a: o si immagini che il testo nel primo campo sia immesso dall'utente e il filtro esegua una banale ricopiatura del testo di input nel secondo campo alla pressione di un button. o progettare una classe Filtro che abbia un metodo mostra() che restituisce il testo di input inalterato. o progettare la GUI (Finestra) con i due campi e il button che attiva il comando mostra(); o progettare un main() che attivi e verifichi il funzionamento. Richieste b: o si immagini che il testo nel primo campo sia, come nella richiesta (a), immesso dall'utente e il filtro esegua una banale ricopiatura del testo di input nel secondo campo alla pressione di un button. o Usare la classe Leggi_mostra progettata nell'esercizio o progettare la GUI con i due campi e il button che attiva il comando mostra(); o progettare un main() che attivi e verifichi il funzionamento. Richiesta c: o immagini che il testo nel primo campo sia, come nella richiesta (a), immesso dall'utente e il filtro scriva nel secondo campo il messaggio "ci sono/non ci sono parole o numeri". Il filtro deve accertare, alla pressione di un button, se il primo campo ha parole o numeri. o Usare la classe progettata nell'esercizio o progettare la GUI con i due campi e il button che attiva il comando; o progettare un main() che attivi e verifichi il funzionamento Come nell'esercizio 9.13 si desidera costruire un programma che analizzi (filtri) un testo contenuto in un file su disco e caricato in un campo di una frame e mostri le elaborazioni in un secondo campo della frame alla pressione dell'opportuno pulsante." Richiesta: o Si modifichi il codice degli esercizi 9.13, per ottenere quanto richiesto, sfruttando ancora sia la classe Leggi_mostra che la classe Filtro. o All'avvio del main() la finestra si dovrà aprire e mostrare un campo per richiedere il nome del file e quindi dovrà mostrare nel primo campo riempito il file nel secondo le elaborazioni. (le parole numerate (se ne contiene), le cifre)

Uno stream o flusso di dati o canale è un percorso di comunicazione tra la sorgente di una certa informazione e la sua destinazione.

Uno stream o flusso di dati o canale è un percorso di comunicazione tra la sorgente di una certa informazione e la sua destinazione. pag.112 9. Input e output Nell informatica classica il concetto di input e output era strettamente legato all uso dei dispositivi esterni di memorizzazione (dischi, nastri) e quindi al concetto di file,

Dettagli

INPUT OUTPUT Programmazione in rete e laboratorio. Le operazioni di I/O avvengono attraverso stream (sequenze di byte)

INPUT OUTPUT Programmazione in rete e laboratorio. Le operazioni di I/O avvengono attraverso stream (sequenze di byte) INPUT OUTPUT 2004-05 Le operazioni di I/O avvengono attraverso stream (sequenze di byte) programma stream in lettura sorgente Programmazione in rete e laboratorio programma stream in scrittura destinazione

Dettagli

Informatica. Prof. A. Longheu. Input e Output

Informatica. Prof. A. Longheu. Input e Output Informatica Prof. A. Longheu Input e Output 1 Il package java.io Il package java.io definisce i concetti base per gestire l I/O da qualsiasi sorgente e verso qualsiasi destinazione. L obiettivo è fornire

Dettagli

LETTURA DI DATI DA INPUT

LETTURA DI DATI DA INPUT LETTURA DI DATI DA INPUT Gli stream di byte consentono già di leggere dati (numeri di vario tipo), tramite la classe DataInputStream FileDescriptor InputStream SequenceInputStream ByteArrayInputStream

Dettagli

Corso sul linguaggio Java

Corso sul linguaggio Java Corso sul linguaggio Java Modulo JAVA6 A1 I file testo 1 Prerequisiti Programmazione base in Java Utilizzo di classi e oggetti Modello produttore consumatore Operazioni logiche su struttura file 2 1 Introduzione

Dettagli

A. Ferrari Java: Stream e File

A. Ferrari Java: Stream e File Java: Stream e File la classe File o per operare con l intero file java mette a disposizione la classe File o per utilizzare la classe File è necessario importare la libreria java.io.file o la classe File

Dettagli

Jav@Lab Il linguaggio Java I file sequenziali

Jav@Lab Il linguaggio Java I file sequenziali Jav@Lab Il linguaggio Java I file sequenziali Input e Output Secondo i canoni dei linguaggi di programmazione "procedurali" il concetto di input e output è strettamente legato al tipo di dispositivo esterno

Dettagli

INPUT OUTPUT

INPUT OUTPUT INPUT OUTPUT Il package java.io include classi, interfacce ed eccezioni per la gestione dellʼi/o. Si può distinguere tra due classi di funzionalità: per leggere e scrivere dati (anche in maniera indipendente

Dettagli

Esercitazione n 4. Capacità di analisi e di estensione di progetti esistenti Il concetto di filtro Linguaggio Java:

Esercitazione n 4. Capacità di analisi e di estensione di progetti esistenti Il concetto di filtro Linguaggio Java: Esercitazione n 4 Obiettivi: Capacità di analisi e di estensione di progetti esistenti Il concetto di filtro Linguaggio Java: Gestione di input/output da console e da file (package java.io) Utilizzo di

Dettagli

Lettura e scrittura - Stream

Lettura e scrittura - Stream Lettura e scrittura - Stream Obiettivo(fine della lezione): leggere/scrivere da/su file (e quindi verso qualsiasi dispositivo) Tipi di stream Stream di caratteri Stream di byte Classi astratte che implementano

Dettagli

Input/Output in Java

Input/Output in Java Input/Output in Java 1 Comunicare con il mondo Praticamente ogni programma ha la necessità di comunicare con il mondo esterno Con l utente attraverso tastiera e video Con il file system per leggere e salvare

Dettagli

Unità A1 I file testo

Unità A1 I file testo Dare una breve descrizione dei termini introdotti: (A) CONOSCENZA TERMINOLOGICA stream file testo file binari file di tipi primitivi bufferizzazione InputStreamReader OutputStreamWriter Reader Writer FileReader

Dettagli

10. File e loro attributi

10. File e loro attributi Appunti java pag. 133 10. File e loro attributi In generale, in qualsiasi sistema operativo, il file system consente di operare su archivi di dati (data files) che possono essere organizzati e memorizzati

Dettagli

Input. Il tipo char Alcune modalità di acquisizione di input. Laboratorio di Programmazione - Luca Tesei

Input. Il tipo char Alcune modalità di acquisizione di input. Laboratorio di Programmazione - Luca Tesei Input Il tipo char Alcune modalità di acquisizione di input 1 Lettura di dati in input Vediamo due modi per acquisire dei dati di input dall utente: 1. Tramite una finestra grafica di dialogo 2. Tramite

Dettagli

LETTURA E SCRITTURA DI FILE

LETTURA E SCRITTURA DI FILE LETTURA E SCRITTURA DI FILE (slide: A. Baratè L.A. Ludovico) Programmazione per la Musica Adriano Baratè LA CLASSE FILE La classe File fornisce una rappresentazione astratta del percorso (pathname) di

Dettagli

Fondamenti di Informatica C Esercitazioni di Laboratorio / 4 Outline

Fondamenti di Informatica C Esercitazioni di Laboratorio / 4  Outline Fondamenti di Informatica C Esercitazioni di Laboratorio / 4 http://polaris.ing.unimo.it/fic/laboratorio.html Ing. Francesco De Mola demola.francesco@unimore.it DII, Modena Via Vignolese (lab. Dottorandi

Dettagli

A. Ferrari Stream e File

A. Ferrari Stream e File Stream e File Java la classe File o per operare con l intero file java mette a disposizione la classe File o per utilizzare la classe File è necessario importare la libreria java.io.file o la classe File

Dettagli

Anno Accademico 2003/04. Docente modulo 1: Annalisa De Bonis. Ripete l esecuzione di statement fino a che la condizione e` verificata

Anno Accademico 2003/04. Docente modulo 1: Annalisa De Bonis. Ripete l esecuzione di statement fino a che la condizione e` verificata Iterazioni Anno Accademico 2003/04 Docente modulo 1: Lo statement while while (condition) statement; Ripete l esecuzione di statement fino a che la condizione e` verificata while (balance < targetbalance)

Dettagli

Lezione 16 programmazione in Java

Lezione 16 programmazione in Java Lezione 16 programmazione in Java Nicola Drago drago@sci.univr.it Dipartimento di Informatica Università di Verona Anteprima Approfondimenti della programmazione OO I FILE Sgli stream (flussi) I file ad

Dettagli

Iterazioni. L istruzione while. while (condition) istruzione

Iterazioni. L istruzione while. while (condition) istruzione Iterazioni L istruzione while while (condition) istruzione Ripete l esecuzione di istruzione fino a che la condizione resta vera while (balance < targetbalance) year++; double interest = balance * rate

Dettagli

Note ed esercizi aggiuntivi

Note ed esercizi aggiuntivi Corso di Programmazione Anno Accademico 2015 2016 Prof. Giovanni Pighizzini ed esercizi aggiuntivi 16. Stream di I/O Esempio. Visualizza sul monitor il contenuto di un file di caratteri. int i; while ((i

Dettagli

Fondamenti di Informatica 1. Prof. B.Buttarazzi A.A. 2010/2011

Fondamenti di Informatica 1. Prof. B.Buttarazzi A.A. 2010/2011 Fondamenti di Informatica 1 Prof. B.Buttarazzi A.A. 2010/2011 Sommario API di Java Istruzione di scrittura Istruzione di lettura 21/03/2011 2 API di Java Java è un linguaggio orientato agli oggetti basato

Dettagli

Corso sul linguaggio Java

Corso sul linguaggio Java Corso sul linguaggio Java Modulo JAVA8 B2 Accesso diretto 1 Prerequisiti Programmazione ad oggetti Conoscenza classi di base di I/O Tecnica della programmazione Organizzazione ed accesso ai file 2 1 Introduzione

Dettagli

ESERCIZIO 1 (FILE DI TESTO)

ESERCIZIO 1 (FILE DI TESTO) ESERCIZIO 1 (FILE DI TESTO) Scrivere su un file di testo righe inserite da console, fino a quando non viene inserita la linea vuota. Passare il nome del file come parametro al programma. Bisogna incapsulare

Dettagli

Informatica I. Ingegneria Medica. Prof. Diego Salamon

Informatica I. Ingegneria Medica. Prof. Diego Salamon Informatica I Ingegneria Medica Prof. Diego Salamon Gestione I/O Prof. Diego Salamon Introduzione Nella creazione e gestione del software è necessario interagire con entità esterne a quelle del programma

Dettagli

LETTURA DI DATI DA INPUT. Gli stream di byte consentono già di leggere dati (numeri di vario tipo), tramite la classe DataInputStream

LETTURA DI DATI DA INPUT. Gli stream di byte consentono già di leggere dati (numeri di vario tipo), tramite la classe DataInputStream LETTURA DI DATI DA INPUT Gli stream di byte consentono già di leggere dati (numeri di vario tipo), tramite la classe DataInputStream LETTURA DI DATI DA INPUT Sfortunatamente, una tale classe non esiste

Dettagli

Corso sul linguaggio Java

Corso sul linguaggio Java Corso sul linguaggio Java Modulo JAVA6 A1 I file testo 1 Prerequisiti Programmazione base in Java Utilizzo di classi e oggetti Modello produttore consumatore Operazioni logiche su struttura file 2 1 Introduzione

Dettagli

A. Ferrari. informatica. Java basi del linguaggio. Alberto Ferrari Informatica

A. Ferrari. informatica. Java basi del linguaggio. Alberto Ferrari Informatica informatica Java basi del linguaggio Alberto Ferrari Informatica struttura di un programma Java /** * Classe EsempioProgramma * Un esempio di programmazione in Java * @author 4A Informatica */ public class

Dettagli

Creazione, eliminazione, lettura e scrittura di file di testo

Creazione, eliminazione, lettura e scrittura di file di testo Creazione, eliminazione, lettura e scrittura di file di testo Creazione Java mette a disposizione degli sviluppatori diverse classi per lavorare con i file di testo, analizziamo le principali: java.io.file

Dettagli

La paninoteca. Mi resta da scrivere solo costo()

La paninoteca. Mi resta da scrivere solo costo() La paninoteca Mi resta da scrivere solo costo() La paninoteca Usiamo l ereditarietà per definire dei Panini particolari Ci sono alcuni tipi di pane Estendendo Panino scrivo meno codice Nell esempio eredito

Dettagli

Note ed esercizi aggiuntivi

Note ed esercizi aggiuntivi Corso di Programmazione Anno Accademico 2015 2016 Prof. Giovanni Pighizzini ed esercizi aggiuntivi Gli esercizi proposti sono utili per rivedere gli esempi riportati, che sono stati sviluppati e discussi

Dettagli

L input da tastiera in Java. Dott. Ing. M. Banci, PhD

L input da tastiera in Java. Dott. Ing. M. Banci, PhD L input 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

Dettagli

Interfaccia Comparable. Fondamenti di Informatica L-B Esercitazione n 5 Java: Comparable, Array. Come sfrutto Comparable?

Interfaccia Comparable. Fondamenti di Informatica L-B Esercitazione n 5 Java: Comparable, Array. Come sfrutto Comparable? Fondamenti di Informatica L-B Esercitazione n 5 Java: Comparable, Array A.A. 2005/06 Tutor: Loris Cancellieri loris.cancellieri@studio.unibo.it Interfaccia Comparable class Contatore implements Comparable

Dettagli

Unità 2 I file binari

Unità 2 I file binari Dare una breve descrizione dei termini introdotti: (A) CONOSCENZA TERMINOLOGICA file binari file di tipi primitivi file di oggetti serializzazione (B) CONOSCENZA E COMPETENZA Rispondere alle seguenti domande

Dettagli

Eccezioni Precisazioni e approfondimenti

Eccezioni Precisazioni e approfondimenti Eccezioni Precisazioni e approfondimenti Costruttore: il parametro String definisce il messaggio di errore associato all eccezione Metodi particolarmente significativi getmessage(): ritorna l istanza di

Dettagli

JAVA - I/O System. Il JAVA considera tutte i flussi da e verso l esterno, come stream di byte. Questi possono essere di ingresso o di uscita:

JAVA - I/O System. Il JAVA considera tutte i flussi da e verso l esterno, come stream di byte. Questi possono essere di ingresso o di uscita: JAVA - I/O System Il JAVA considera tutte i flussi da e verso l esterno, come stream di byte. Questi possono essere di ingresso o di uscita: 1. InputStream: Flusso di byte in ingresso. Con questa classe

Dettagli

Programmazione a Oggetti e JAVA. Prof. B.Buttarazzi A.A. 2012/2013

Programmazione a Oggetti e JAVA. Prof. B.Buttarazzi A.A. 2012/2013 Programmazione a Oggetti e JAVA Prof. B.Buttarazzi A.A. 2012/2013 Sommario Array Array monodimensionali Array bidimensionali Esercizi 16/01/2013 2 ARRAY Gli array sono oggetti utilizzati in Java per memorizzare

Dettagli

System.out.print("\tATTENZIONE: hi inserito un valore non valido!\n");

System.out.print(\tATTENZIONE: hi inserito un valore non valido!\n); Creare un applicazione console che dato l indice della borsa di Milano nel giorno precedente, calcola la variazione percentuale rispetto al valore dell indice del giorno corrente. import java.io.*; public

Dettagli

Le basi del linguaggio Java

Le basi del linguaggio Java Le basi del linguaggio Java Compilazione e interpretazione Quando si compila il codice sorgente scritto in Java, il compilatore genera il codice compilato, chiamato bytecode. È un codice generato per una

Dettagli

Programmazione ad Oggetti

Programmazione ad Oggetti Programmazione ad Oggetti Java File Flussi e file Flusso (stream) = sequenza di dati di input: da cui leggere di output: su cui scrivere I file sono visti come flussi di dati Il package java.io definisce

Dettagli

Creazione, eliminazione, lettura e scrittura di file di testo

Creazione, eliminazione, lettura e scrittura di file di testo Creazione, eliminazione, lettura e scrittura di file di testo Java mette a disposizione degli sviluppatori diverse classi per lavorare con i file di testo, analizziamo le principali: java.io.file La classe

Dettagli

Prova d Esame Compito A

Prova d Esame Compito A Prova d Esame 19.04.2005 Compito A Domanda 1 A) Si richiede di analizzare le seguenti sezioni di codice. Il candidato indichi il risultato dell esecuzione del main. public class Father { private int counter;

Dettagli

Programmazione Orientata agli Oggetti in Linguaggio Java

Programmazione Orientata agli Oggetti in Linguaggio Java Programmazione Orientata agli Oggetti in Linguaggio Java Eccezioni: Gestione dei Flussi versione 2.1 Questo lavoro è concesso in uso secondo i termini di una licenza Creative Commons (vedi ultima pagina)

Dettagli

Esercitazioni di FONDAMENTI DI INFORMATICA MODULO B

Esercitazioni di FONDAMENTI DI INFORMATICA MODULO B Università di Ferrara Dipartimento di Ingegneria Esercitazioni di FONDAMENTI DI INFORMATICA MODULO B Tutor Arnaud Nguembang Fadja: ngmrnd@unife.it Damiano Azzolini: damiano.azzolini@student.unife.it Esercizio

Dettagli

FileInputStream read() read(byte[]) readint() DataInputStream FileInputStream EOFException

FileInputStream read() read(byte[]) readint() DataInputStream FileInputStream EOFException ESERCITAZIONE 9 I/O Esercizio 1 Lettura da file binario Se gli interi letti appartengono a [-5;5] scrittura su un altro file binario Altrimenti sollevare una eccezione la quale stampa a video un messaggio

Dettagli

Fondamenti di Informatica 1. Prof. B.Buttarazzi A.A. 2010/2011

Fondamenti di Informatica 1. Prof. B.Buttarazzi A.A. 2010/2011 Fondamenti di Informatica 1 Prof. B.Buttarazzi A.A. 2010/2011 Sommario La classe String Lettura da input di dati numerici (tipo int) Stampa di dati numerici Uno sguardo al codice Esercizi 21/03/2011 2

Dettagli

INTRODUZIONE ALLA PROGRAMMAZIONE AD ALTO LIVELLO IL LINGUAGGIO JAVA. Struttura di un programma Java

INTRODUZIONE ALLA PROGRAMMAZIONE AD ALTO LIVELLO IL LINGUAGGIO JAVA. Struttura di un programma Java Fondamenti di Informatica INTRODUZIONE ALLA PROGRAMMAZIONE AD ALTO LIVELLO IL LINGUAGGIO JAVA 1 Struttura di un programma Java Un programma Java consiste in un insieme di definizioni di classi. In genere

Dettagli

Caratteri Input da Console

Caratteri Input da Console Caratteri Input da Console Il tipo char Input dallo standard input 12/11/2004 Laboratorio di Programmazione - Luca Tesei 1 Il tipo base char Il tipo base char rappresenta i caratteri Come sappiamo Java

Dettagli

Laboratorio di programmazione

Laboratorio di programmazione Laboratorio di programmazione 25 ottobre 2017 Da questo laboratorio, lo scheletro dei vostri programmi deve essere import java.io.*; import java.util.*; public class NomeClasse { public static void main(

Dettagli

Variabili e Metodi di classe Interfacce e Package Gestione di File in Java

Variabili e Metodi di classe Interfacce e Package Gestione di File in Java Fondamenti di Informatica Variabili e Metodi di classe Interfacce e Package Gestione di File in Java Fondamenti di Informatica - D. Talia - UNICAL 1 Variabili di classe: Static Una variabile di classe

Dettagli

Corso sul linguaggio Java

Corso sul linguaggio Java Corso sul linguaggio Java Modulo JAVA6 A2 I file binari 1 Prerequisiti Programmazione base in Java Utilizzo di classi e oggetti Modello produttore consumatore Operazioni logiche su struttura file 2 1 Introduzione

Dettagli

Preparazione allo Scritto di Programmazione

Preparazione allo Scritto di Programmazione Preparazione allo Scritto di Programmazione Informatica / Comunicazione Digitale A.A. 2013/2014 1. Una riga di testo è detta numerica se e solo se contiene più cifre che caratteri di altro genere. Ad esempio,

Dettagli

IL PACKAGE java.io. Il package java.io definisce i concetti base per gestire l'i/o da qualsiasi sorgente e verso qualsiasi destinazione.

IL PACKAGE java.io. Il package java.io definisce i concetti base per gestire l'i/o da qualsiasi sorgente e verso qualsiasi destinazione. IL PACKAGE java.io Il package java.io definisce i concetti base per gestire l'i/o da qualsiasi sorgente e verso qualsiasi destinazione. CONCETTO BASE: LO STREAM Uno stream è un canale di comunicazione

Dettagli

RETI DI CALCOLATORI Linguaggio Java: Eccezioni

RETI DI CALCOLATORI Linguaggio Java: Eccezioni Università degli Studi di Modena e Reggio Emilia Facoltà di Ingegneria Reggio Emilia CORSO DI RETI DI CALCOLATORI Linguaggio Java: Eccezioni Prof. Franco Zambonelli Lucidi realizzati in collaborazione

Dettagli

Lettura e scrittura - Stream

Lettura e scrittura - Stream Lettura e scrittura - Stream Obiettivo(fine della lezione): leggere/scrivere da/su file (e quindi verso qualsiasi dispositivo)! Tipi di stream " Stream di caratteri " Stream di byte! Classi astratte che

Dettagli

Implementazione di DFA in C

Implementazione di DFA in C Implementazione di DFA in C Dispensa di Laboratorio di Linguaggi di Programmazione Sommario Corrado Mencar, Pasquale Lops, Stefano Ferilli Questa dispensa fornisce le linee guida per l implementazione,

Dettagli

Variabili e Metodi di classe Interfacce e Package File in Java

Variabili e Metodi di classe Interfacce e Package File in Java Fondamenti di Informatica Variabili e Metodi di classe Interfacce e Package File in Java Fondamenti di Informatica - D. Talia - UNICAL 1 Variabili di classe: Static Una variabile di classe definisce un

Dettagli

// Dichiarare le variabili d'istanza e i metodi di lettura e scrittura delle stesse utilizzando il reference predefinito THIS. //... //... //... //...

// Dichiarare le variabili d'istanza e i metodi di lettura e scrittura delle stesse utilizzando il reference predefinito THIS. //... //... //... //... import java.io.*; public class This_EquazioneSecondoGra // Dichiarare le variabili d'istanza e i metodi di lettura e scrittura delle stesse utilizzando il reference predefinito THIS. //... //... //...

Dettagli

10. File e loro attributi

10. File e loro attributi appunti java Capitolo 10 pag. 1 10. File e loro attributi In generale, in qualsiasi sistema operativo, il file system consente di operare su archivi di dati (data files) che possono essere organizzati

Dettagli

Programmazione I - corso B a.a prof. Viviana Bono

Programmazione I - corso B a.a prof. Viviana Bono Università di Torino Facoltà di Scienze MFN Corso di Studi in Informatica Programmazione I - corso B a.a. 2009-10 prof. Viviana Bono Blocco 12 Riepilogo e complementi sui tipi Ripasso del sistema di tipi

Dettagli

IL PACKAGE java.io CONCETTO BASE: LO STREAM

IL PACKAGE java.io CONCETTO BASE: LO STREAM IL PACKAGE java.io Il package java.io definisce i concetti base per gestire l'i/o da qualsiasi sorgente e verso qualsiasi destinazione. CONCETTO BASE: LO STREAM Uno stream è un canale di comunicazione

Dettagli

Realizzare un applicazione console che stampi la somma dei primi n numeri dispari oppure pari (a scelta dell operatore). import java.io.

Realizzare un applicazione console che stampi la somma dei primi n numeri dispari oppure pari (a scelta dell operatore). import java.io. Realizzare un applicazione console che stampi la somma dei primi n numeri dispari oppure pari (a scelta dell operatore). import java.io.*; public class M1_13 { public static void main(string args[]) throws

Dettagli

Metodi statici. Dichiarazione e chiamata di metodi statici

Metodi statici. Dichiarazione e chiamata di metodi statici Metodi statici Dichiarazione e chiamata di metodi statici Cos è un metodo Un metodo è un blocco di istruzioni che fornisce una funzionalità e viene identificato con un nome Può avere dei parametri ed un

Dettagli

Input/output da file I/O ANSI e I/O UNIX FLUSSI E FILE FLUSSI FLUSSI di TESTO FLUSSI BINARI FILE

Input/output da file I/O ANSI e I/O UNIX FLUSSI E FILE FLUSSI FLUSSI di TESTO FLUSSI BINARI FILE Input/output da file Il linguaggio C non contiene istruzioni di I/O, in quanto tali operazioni vengono eseguite tramite funzioni di libreria standard. Questo approccio rende estremamente flessibile e potente

Dettagli

import java.io.*; char sceltautente = '_'; boolean condizionesn = true; boolean condizionedowhile = true; boolean condizioneprogramma = true;

import java.io.*; char sceltautente = '_'; boolean condizionesn = true; boolean condizionedowhile = true; boolean condizioneprogramma = true; Un imposta sul reddito viene applicata in base alle seguenti fasce: fino a 35.000 euro 23% e oltre 35.000 euro 33%. Progettare un software, basato su un applicazione console, che, dato un certo reddito,

Dettagli

Preparazione allo scritto di Programmazione Comunicazione Digitale / Informatica - A.A. 2012/2013

Preparazione allo scritto di Programmazione Comunicazione Digitale / Informatica - A.A. 2012/2013 Preparazione allo scritto di Programmazione Comunicazione Digitale / Informatica - A.A. 2012/2013 Matricola:...................... Cognome:...................... Nome:...................... Informatica

Dettagli

Prova d Esame Compito A

Prova d Esame Compito A Prova d Esame 19.07.2005 Compito A Domanda 1 A) Si richiede di analizzare le seguenti sezioni di codice. Il candidato indichi il risultato dell esecuzione del main. public class Father { private int counter;

Dettagli

File binari e file di testo

File binari e file di testo I file File binari e file di testo distinzione tra file binari file di testo si possono usare funzioni diverse per la gestione di tipi di file diversi Programmazione Gestione dei file 2 File binari e file

Dettagli

Corso sul linguaggio Java

Corso sul linguaggio Java Corso sul linguaggio Java Modulo JAVA8 B1 Accesso sequenziale 1 Prerequisiti Programmazione ad oggetti Conoscenza classi di base di I/O Tecnica della programmazione 2 1 Introduzione In questa Unità vediamo

Dettagli

// Costante utilizzata per definire il numero massimo di serie che il programma può generare.

// Costante utilizzata per definire il numero massimo di serie che il programma può generare. import java.io.*; import java.util.random; import java.util.arraylist; /** * Applicazione per la creazione di serie di numeri casuali e di serie di numeri basate sul calcolo dei ritardatari per il gioco

Dettagli

Impariamo a programmare in. Lezione 7

Impariamo a programmare in. Lezione 7 Impariamo a programmare in Ancora Stringhe Sequenze di escape Proviamo a stampare una stringa che contiene delle virgolette Hello, World! // NON FUNZIONA! System.out.println("Hello, "World"!"); Il compilatore

Dettagli

RicercaSequenziale import public class public static void throws new new new int int int char boolean true true false false out true out out else

RicercaSequenziale import public class public static void throws new new new int int int char boolean true true false false out true out out else Algoritmo di ricerca sequenziale o lineare, in una Tabella con LunghezzaTabella righe. L algoritmo restituisce il valore TRUE in Trovato se la chiave di ricerca C esiste nel campo Chiave (numerico) della

Dettagli

Metodi statci. Dichiarazione e chiamata di metodi statci

Metodi statci. Dichiarazione e chiamata di metodi statci Metodi statci Dichiarazione e chiamata di metodi statci Cos è un metodo Un metodo è un blocco di istruzioni che fornisce una funzionalità e viene identificato con un nome Può avere dei parametri ed un

Dettagli

Il package java.io fornisce le classi necessarie per effettuare input e output su file/rete/console/aree di memoria RAM eccetera.

Il package java.io fornisce le classi necessarie per effettuare input e output su file/rete/console/aree di memoria RAM eccetera. IL PACKAGE JAVA.IO Il package java.io fornisce le classi necessarie per effettuare input e output su file/rete/console/aree di memoria RAM eccetera. Il package può essere classificato secondo vari punti

Dettagli

Fondamenti di Informatica 1. Prof. B.Buttarazzi A.A. 2010/2011

Fondamenti di Informatica 1. Prof. B.Buttarazzi A.A. 2010/2011 Fondamenti di Informatica 1 Prof. B.Buttarazzi A.A. 2010/2011 Sommario Istruzioni di controllo Iterative Condizionali Algoritmi e Diagrammi di flusso Esercizi 28/03/2011 2 Istruzioni iterative while do

Dettagli

Gestione dei file. Stefano Ferrari. Università degli Studi di Milano Programmazione. anno accademico

Gestione dei file. Stefano Ferrari. Università degli Studi di Milano Programmazione. anno accademico Gestione dei file Stefano Ferrari Università degli Studi di Milano stefano.ferrari@unimi.it Programmazione anno accademico 2016 2017 Gli stream Si dice stream qualsiasi sorgente di dati in ingresso e qualsiasi

Dettagli

import java.io.*; public class EU4_23 { private double prezzoacquisto; private double percentualeguadagno;

import java.io.*; public class EU4_23 { private double prezzoacquisto; private double percentualeguadagno; Un dettagliante acquista un prodotto a 200 euro. Considerando che, per avere un sufficiente guadagno e recuperare le proprie spese, deve aumentare il costo del 70%, determinare il prezzo a cui dovrebbe

Dettagli

domenica 9 giugno 13 Serializzazione

domenica 9 giugno 13 Serializzazione Serializzazione A cosa serve? Ad ottenere una rappresentazione di una struttura dati che possiamo memorizzare, trasmettere via rete Cosa possiamo serializzare? OK NO Tipi primitivi, Riferimenti stringhe

Dettagli

Programmazione a Oggetti e JAVA. Prof. B.Buttarazzi A.A. 2012/2013

Programmazione a Oggetti e JAVA. Prof. B.Buttarazzi A.A. 2012/2013 Programmazione a Oggetti e JAVA Prof. B.Buttarazzi A.A. 2012/2013 Sommario Metodi statici Parametri attuali e formali Passaggio dei parametri Effetti collaterali Metodi statici per Array Esercizi 16/01/2013

Dettagli

Unità A1 Funzioni MODULO Java 2

Unità A1 Funzioni MODULO Java 2 Dare una breve descrizione dei termini introdotti: (A) CONOSCENZA TERMINOLOGICA Passaggio parametri per valore Passaggio parametri per indirizzo Parametri formali e attuali Regole di visibilità Ambiente

Dettagli

Esercitazione n 2. Obiettivi

Esercitazione n 2. Obiettivi Esercitazione n 2 Obiettivi Progettazione di una applicazione Java Utilizzo di classi come schemi Utilizzo di costruttori Utilizzo di stringhe Uguaglianza tra oggetti Utilizzo di classi come componenti

Dettagli

Note ed esercizi aggiuntivi

Note ed esercizi aggiuntivi Corso di Programmazione Anno Accademico 2014 2015 Prof. Giovanni Pighizzini Note ed esercizi aggiuntivi 10. Ereditarietà, file di testo, gerarchia delle classi e gerarchia dei tipi Esercizio 10.1 Scrivete

Dettagli

INTRODUZIONE ALLA PROGRAMMAZIONE AD ALTO LIVELLO IL LINGUAGGIO JAVA. Fondamenti di Informatica - D. Talia - UNICAL 1. Fondamenti di Informatica

INTRODUZIONE ALLA PROGRAMMAZIONE AD ALTO LIVELLO IL LINGUAGGIO JAVA. Fondamenti di Informatica - D. Talia - UNICAL 1. Fondamenti di Informatica Fondamenti di Informatica INTRODUZIONE ALLA PROGRAMMAZIONE AD ALTO LIVELLO IL LINGUAGGIO JAVA Fondamenti di Informatica - D. Talia - UNICAL 1 Fondamenti di Informatica - Programma Un programma è una formulazione

Dettagli

INTRODUZIONE ALLA PROGRAMMAZIONE AD ALTO LIVELLO IL LINGUAGGIO JAVA. Fondamenti di Informatica - Programma

INTRODUZIONE ALLA PROGRAMMAZIONE AD ALTO LIVELLO IL LINGUAGGIO JAVA. Fondamenti di Informatica - Programma Fondamenti di Informatica INTRODUZIONE ALLA PROGRAMMAZIONE AD ALTO LIVELLO IL LINGUAGGIO JAVA Fondamenti di Informatica - D. Talia - UNICAL 1 Fondamenti di Informatica - Programma Un programma è una formulazione

Dettagli

Capitolo 5. Array e collezioni. c 2005 Pearson Education Italia Capitolo 5-1 / 61

Capitolo 5. Array e collezioni. c 2005 Pearson Education Italia Capitolo 5-1 / 61 Capitolo 5 Array e collezioni c 2005 Pearson Education Italia Capitolo 5-1 / 61 Sommario: Array e collezioni 1 Array Array di oggetti Lunghezza di un array Accesso agli elementi di un array Array e cicli

Dettagli

import java.io.*; public class EU4_11 { private double larghezza; private double lunghezza; private double superficie;

import java.io.*; public class EU4_11 { private double larghezza; private double lunghezza; private double superficie; Un terreno rettangolare ha una superficie complessiva di metri quadrati 15.498 e una base di metri 126. Determina l altezza impiegando un applet. SUGGERIMENTO: progettare e realizzare una classe Rettangolo

Dettagli

Prova d Esame Compito A

Prova d Esame Compito A Domanda 1 A) Si richiede di analizzare le seguenti sezioni di codice. Il candidato indichi il risultato dell esecuzione del main. public class Father { private static int counter=0; private int code; public

Dettagli

FONDAMENTI DI INFORMATICA C Linguaggio Java: Eccezioni

FONDAMENTI DI INFORMATICA C Linguaggio Java: Eccezioni Università degli Studi di Modena e Reggio Emilia Facoltà di Ingegneria CORSO DI FONDAMENTI DI INFORMATICA C Linguaggio Java: Eccezioni Prof. Zambonelli, Ing. Cabri, Ing. Denti, Ing. Andrea Aime Zambonelli,

Dettagli

// Variabile utilizzata esclusivamente nei cicli DO... WHILE per la verifica dei dati

// Variabile utilizzata esclusivamente nei cicli DO... WHILE per la verifica dei dati import java.io.*; public class Punto { private double x, y; public Punto (double valore_x, double valore_y) { this.x = valore_x; this.y = valore_y; public static void main(string args[]) throws IOException

Dettagli

Esempi di programmi. Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 1. Dispensa E01. A. Miola Settembre 2007

Esempi di programmi. Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 1. Dispensa E01. A. Miola Settembre 2007 Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 1 Dispensa E01 Esempi di programmi A. Miola Settembre 2007 http://www.dia.uniroma3.it/~java/fondinf1/ Esempi di programmi - 1 1 Contenuti

Dettagli

Cosa serve per cominciare?

Cosa serve per cominciare? Cosa serve per cominciare? La linea di comando Il notepad (o equivalente) Saper scrivere qualcosa a video da programma risultato dell elaborazione elaborazione Ma come si fa?! 1 Input / Output L'immissione

Dettagli

Fondamenti di informatica T-1 (A K) Esercitazione 2 Basi del linguaggio Java

Fondamenti di informatica T-1 (A K) Esercitazione 2 Basi del linguaggio Java Fondamenti di informatica T-1 (A K) Esercitazione 2 Basi del linguaggio Java AA 2018/2019 Tutor Lorenzo Rosa lorenzo.rosa@unibo.it 2 Programma Introduzione al calcolatore e Java Linguaggio Java, basi e

Dettagli

Fondamenti di Informatica 1. Prof. B.Buttarazzi A.A. 2010/2011

Fondamenti di Informatica 1. Prof. B.Buttarazzi A.A. 2010/2011 Fondamenti di Informatica 1 Prof. B.Buttarazzi A.A. 2010/2011 Sommario Istruzione condizionale switch Istruzioni di salto break e continue Uso di variabili di tipo boolean Variabili di tipo array (monodimensionali)

Dettagli

import java.io.*; public class EU4_09 { private int giornilocazionea; private int giornilocazioneb; private double speselocazioneappartamento;

import java.io.*; public class EU4_09 { private int giornilocazionea; private int giornilocazioneb; private double speselocazioneappartamento; Due persone A e B hanno affittato un appartamento per 1 anno e in totale hanno sostenuto spese per 3100 euro. Dato che il Sig. A non ha utilizzato l alloggio per 80 giorni e che le spese sono ripartite

Dettagli

Le classi in java. Un semplice programma java, formato da una sola classe, assume la seguente struttura:

Le classi in java. Un semplice programma java, formato da una sola classe, assume la seguente struttura: Le classi in java Un semplice programma java, formato da una sola classe, assume la seguente struttura: class Domanda static void main(string args[]) System.out.println( Quanti anni hai? ); La classe dichiarata

Dettagli

Corso sul linguaggio Java

Corso sul linguaggio Java Corso sul linguaggio Java Modulo JAVA2 2.1- Funzioni 1 Prerequisiti Programmazione elementare in Java Tecnica top-down Concetto matematico di funzione Compilazione e link di programmi Esecuzione di funzioni

Dettagli

Programmazione a Oggetti e JAVA. Prof. B.Buttarazzi A.A. 2012/2013

Programmazione a Oggetti e JAVA. Prof. B.Buttarazzi A.A. 2012/2013 Programmazione a Oggetti e JAVA Prof. B.Buttarazzi A.A. 2012/2013 Sommario Uso dell ambiente di sviluppo Eclipse API di Java Istruzione di scrittura Istruzione di lettura 16/01/2013 2 Installazione di

Dettagli

Operazioni di input/output. Prof. Francesco Accarino IIS Altiero Spinelli Via Leopardi 132 Sesto San Giovanni

Operazioni di input/output. Prof. Francesco Accarino IIS Altiero Spinelli Via Leopardi 132 Sesto San Giovanni 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)

Dettagli