Laboratorio di Informatica Lezione 4disi.unitn.it/~consonni/teaching/labinfo-mat_2015... · Quando...

55
Laboratorio di Informatica Lezione 4 Cristian Consonni 28 ottobre 2015 Cristian Consonni Laboratorio di Informatica , Lezione 4 1 / 42

Transcript of Laboratorio di Informatica Lezione 4disi.unitn.it/~consonni/teaching/labinfo-mat_2015... · Quando...

Page 1: Laboratorio di Informatica Lezione 4disi.unitn.it/~consonni/teaching/labinfo-mat_2015... · Quando create una classe, la prima lettera `e Maiuscola, ad es. ... Cristian Consonni Laboratorio

Laboratorio di InformaticaLezione 4

Cristian Consonni28 ottobre 2015

Cristian Consonni Laboratorio di Informatica , Lezione 4 1 / 42

Page 2: Laboratorio di Informatica Lezione 4disi.unitn.it/~consonni/teaching/labinfo-mat_2015... · Quando create una classe, la prima lettera `e Maiuscola, ad es. ... Cristian Consonni Laboratorio

Outline

1 Canali standard

2 Input da tastiera

3 Output

4 Esercizi (parte I)

5 Lettura da File

6 Scrittura su File

7 Esercizi

Cristian Consonni Laboratorio di Informatica , Lezione 4 2 / 42

Page 3: Laboratorio di Informatica Lezione 4disi.unitn.it/~consonni/teaching/labinfo-mat_2015... · Quando create una classe, la prima lettera `e Maiuscola, ad es. ... Cristian Consonni Laboratorio

Chi sono

Cristian ConsonniDISI - Dipartimento di Ingegneria e Scienza dell’InformazionePagina web del laboratorio:http://disi.unitn.it/˜consonni/teaching

Email: [email protected]: Povo 2 - Open Space 9

Per domande: scrivetemi una mailRicevimento: su appuntamento via mail

Cristian Consonni Laboratorio di Informatica , Lezione 4 3 / 42

Page 4: Laboratorio di Informatica Lezione 4disi.unitn.it/~consonni/teaching/labinfo-mat_2015... · Quando create una classe, la prima lettera `e Maiuscola, ad es. ... Cristian Consonni Laboratorio

Outline for section 1

1 Canali standard

2 Input da tastiera

3 Output

4 Esercizi (parte I)

5 Lettura da File

6 Scrittura su File

7 Esercizi

Cristian Consonni Laboratorio di Informatica , Lezione 4 4 / 42

Page 5: Laboratorio di Informatica Lezione 4disi.unitn.it/~consonni/teaching/labinfo-mat_2015... · Quando create una classe, la prima lettera `e Maiuscola, ad es. ... Cristian Consonni Laboratorio

Note sullo stile

Utilizzare il camelCase/PascalCasehttps://en.wikipedia.org/w/index.php?title=CamelCase&oldid=686054689

Quando create una classe, la prima lettera e Maiuscola, ad es.TestPrimo;I metodi e le variabili hanno la lettera iniziale minuscola, ad es.sommaInteri, stampaVettore;le costanti vanno indicate tutte in MAIUSCOLO, ad es. NMAX,EPSILON;

Cristian Consonni Laboratorio di Informatica , Lezione 4 5 / 42

Page 6: Laboratorio di Informatica Lezione 4disi.unitn.it/~consonni/teaching/labinfo-mat_2015... · Quando create una classe, la prima lettera `e Maiuscola, ad es. ... Cristian Consonni Laboratorio

Canali standard (I)

�I canali standard (o standard streams), in tutti i modernisistemi operativi, rappresentano i dispositivi logici di input e dioutput che collegano un programma con l’ambiente operativo incui esso viene eseguito (tipicamente un terminale testuale) eche sono connessi automaticamente al suo avvio.�

fonte: https://it.wikipedia.org/wiki/Canali_standard

Cristian Consonni Laboratorio di Informatica , Lezione 4 6 / 42

Page 7: Laboratorio di Informatica Lezione 4disi.unitn.it/~consonni/teaching/labinfo-mat_2015... · Quando create una classe, la prima lettera `e Maiuscola, ad es. ... Cristian Consonni Laboratorio

Canali standard (II)

Esistono tre canali standard predifiniti:stdin: standard input;stdout: standard output;stderr: standard error;

Cristian Consonni Laboratorio di Informatica , Lezione 4 7 / 42

Page 8: Laboratorio di Informatica Lezione 4disi.unitn.it/~consonni/teaching/labinfo-mat_2015... · Quando create una classe, la prima lettera `e Maiuscola, ad es. ... Cristian Consonni Laboratorio

Canali standard (III)

I canali standard possono essere rappresentati nel modo seguente:

input main output

errors

stdin stdout

stderr

Cristian Consonni Laboratorio di Informatica , Lezione 4 8 / 42

Page 9: Laboratorio di Informatica Lezione 4disi.unitn.it/~consonni/teaching/labinfo-mat_2015... · Quando create una classe, la prima lettera `e Maiuscola, ad es. ... Cristian Consonni Laboratorio

Canali standard (IV)

Questi canali sono tutti legati al terminale (o console o commandprompt).Per esempio, tramite il terminale possiamo:

leggere un input da terminale (stdin);stamparlo a schermo (stdout);raccogliere un messaggio di errore (stderr);

Cristian Consonni Laboratorio di Informatica , Lezione 4 9 / 42

Page 10: Laboratorio di Informatica Lezione 4disi.unitn.it/~consonni/teaching/labinfo-mat_2015... · Quando create una classe, la prima lettera `e Maiuscola, ad es. ... Cristian Consonni Laboratorio

Canali standard (IV)

Questi canali sono tutti legati al terminale (o console o commandprompt).Per esempio, tramite il terminale possiamo:

leggere un input da terminale (stdin);stamparlo a schermo (stdout);raccogliere un messaggio di errore (stderr);

Cristian Consonni Laboratorio di Informatica , Lezione 4 9 / 42

Page 11: Laboratorio di Informatica Lezione 4disi.unitn.it/~consonni/teaching/labinfo-mat_2015... · Quando create una classe, la prima lettera `e Maiuscola, ad es. ... Cristian Consonni Laboratorio

Canali standard (IV)

Questi canali sono tutti legati al terminale (o console o commandprompt).Per esempio, tramite il terminale possiamo:

leggere un input da terminale (stdin);stamparlo a schermo (stdout);raccogliere un messaggio di errore (stderr);

Cristian Consonni Laboratorio di Informatica , Lezione 4 9 / 42

Page 12: Laboratorio di Informatica Lezione 4disi.unitn.it/~consonni/teaching/labinfo-mat_2015... · Quando create una classe, la prima lettera `e Maiuscola, ad es. ... Cristian Consonni Laboratorio

Canali standard (IV)

Questi canali sono tutti legati al terminale (o console o commandprompt).Per esempio, tramite il terminale possiamo:

leggere un input da terminale (stdin);stamparlo a schermo (stdout);raccogliere un messaggio di errore (stderr);

Cristian Consonni Laboratorio di Informatica , Lezione 4 9 / 42

Page 13: Laboratorio di Informatica Lezione 4disi.unitn.it/~consonni/teaching/labinfo-mat_2015... · Quando create una classe, la prima lettera `e Maiuscola, ad es. ... Cristian Consonni Laboratorio

Canali standard (IV)

Questi canali sono tutti legati al terminale (o console o commandprompt).Per esempio, tramite il terminale possiamo:

leggere un input da terminale (stdin);stamparlo a schermo (stdout);raccogliere un messaggio di errore (stderr);

Cristian Consonni Laboratorio di Informatica , Lezione 4 9 / 42

Page 14: Laboratorio di Informatica Lezione 4disi.unitn.it/~consonni/teaching/labinfo-mat_2015... · Quando create una classe, la prima lettera `e Maiuscola, ad es. ... Cristian Consonni Laboratorio

Canali standard (V)

In sistemi Unix (Linux e Mac OS X) e possibile separare (redirezionare) idiversi streams lanciando il comando con una sintassi speciale:

java LetturaFile <in 1>out 2>err

< redireziona lo stdin;1> redireziona lo stdout;2> redireziona lo stderr;

Cristian Consonni Laboratorio di Informatica , Lezione 4 10 / 42

Page 15: Laboratorio di Informatica Lezione 4disi.unitn.it/~consonni/teaching/labinfo-mat_2015... · Quando create una classe, la prima lettera `e Maiuscola, ad es. ... Cristian Consonni Laboratorio

Canali standard (V)

In sistemi Unix (Linux e Mac OS X) e possibile separare (redirezionare) idiversi streams lanciando il comando con una sintassi speciale:

java LetturaFile <in 1>out 2>err

< redireziona lo stdin;1> redireziona lo stdout;2> redireziona lo stderr;

Cristian Consonni Laboratorio di Informatica , Lezione 4 10 / 42

Page 16: Laboratorio di Informatica Lezione 4disi.unitn.it/~consonni/teaching/labinfo-mat_2015... · Quando create una classe, la prima lettera `e Maiuscola, ad es. ... Cristian Consonni Laboratorio

Canali standard (V)

In sistemi Unix (Linux e Mac OS X) e possibile separare (redirezionare) idiversi streams lanciando il comando con una sintassi speciale:

java LetturaFile <in 1>out 2>err

< redireziona lo stdin;1> redireziona lo stdout;2> redireziona lo stderr;

Cristian Consonni Laboratorio di Informatica , Lezione 4 10 / 42

Page 17: Laboratorio di Informatica Lezione 4disi.unitn.it/~consonni/teaching/labinfo-mat_2015... · Quando create una classe, la prima lettera `e Maiuscola, ad es. ... Cristian Consonni Laboratorio

Canali standard (V)

In sistemi Unix (Linux e Mac OS X) e possibile separare (redirezionare) idiversi streams lanciando il comando con una sintassi speciale:

java LetturaFile <in 1>out 2>err

< redireziona lo stdin;1> redireziona lo stdout;2> redireziona lo stderr;

Cristian Consonni Laboratorio di Informatica , Lezione 4 10 / 42

Page 18: Laboratorio di Informatica Lezione 4disi.unitn.it/~consonni/teaching/labinfo-mat_2015... · Quando create una classe, la prima lettera `e Maiuscola, ad es. ... Cristian Consonni Laboratorio

Outline for section 2

1 Canali standard

2 Input da tastiera

3 Output

4 Esercizi (parte I)

5 Lettura da File

6 Scrittura su File

7 Esercizi

Cristian Consonni Laboratorio di Informatica , Lezione 4 11 / 42

Page 19: Laboratorio di Informatica Lezione 4disi.unitn.it/~consonni/teaching/labinfo-mat_2015... · Quando create una classe, la prima lettera `e Maiuscola, ad es. ... Cristian Consonni Laboratorio

Lettura input da tastiera (I)

Abbiamo gia visto che per stampare dei valori a schermo si usa:System.out

questo permette di interagire con lo stdout.

Analogamente:System.in

permette di interagire con lo stdin.

Cristian Consonni Laboratorio di Informatica , Lezione 4 12 / 42

Page 20: Laboratorio di Informatica Lezione 4disi.unitn.it/~consonni/teaching/labinfo-mat_2015... · Quando create una classe, la prima lettera `e Maiuscola, ad es. ... Cristian Consonni Laboratorio

Lettura input da tastiera (II)

Nella libreria java.util di Java esiste l’oggetto Scanner che cipermette di utilizzare l’input della console:import java.util.Scanner;

public class LetturaFile {

public static void main(String[] args) {Scanner input = new Scanner(System.in);

...

// Al termine della lettura chiudere il canale di inputinput.close();

}}

Cristian Consonni Laboratorio di Informatica , Lezione 4 13 / 42

Page 21: Laboratorio di Informatica Lezione 4disi.unitn.it/~consonni/teaching/labinfo-mat_2015... · Quando create una classe, la prima lettera `e Maiuscola, ad es. ... Cristian Consonni Laboratorio

Lettura input da tastiera (III)

Per potere utilizzare Scanner dobbiamo importare la libreria java.utilaggiungendo la riga:import java.util.Scanner;

all’inizio del file.

Lo statement import e il modo in cui si possono importare librerie in unprogramma Java.

Una libreria e un insieme di funzioni e/o strutture dati predefinite epredisposte per essere riutilizzate facilmente all’interno di svariatiprogrammi.

Cristian Consonni Laboratorio di Informatica , Lezione 4 14 / 42

Page 22: Laboratorio di Informatica Lezione 4disi.unitn.it/~consonni/teaching/labinfo-mat_2015... · Quando create una classe, la prima lettera `e Maiuscola, ad es. ... Cristian Consonni Laboratorio

Modalita di lettura da stdin (I)

Dopo aver dichiarato l’oggetto di tipo Scanner

Scanner input = new Scanner(System.in);si possono usare i seguenti metodi:

input.nextInt() ⇒ lettura di un int;input.nextDouble() ⇒ lettura di un double;input.next() ⇒ lettura di una stringa;input.nextLine() ⇒ legge l’intera linea fino al carattere newline(Invio);

Cristian Consonni Laboratorio di Informatica , Lezione 4 15 / 42

Page 23: Laboratorio di Informatica Lezione 4disi.unitn.it/~consonni/teaching/labinfo-mat_2015... · Quando create una classe, la prima lettera `e Maiuscola, ad es. ... Cristian Consonni Laboratorio

Modalita di lettura da stdin (II)

Se viene inserito un valore di un tipo non corrispondendente vienecausato un errore ovvero viene lanciata un’eccezione.

Se per esempio uso input.nextInt():Inserisci un numero intero: 3.2

Exception in thread "main" java.util.InputMismatchExceptionat java.util.Scanner.throwFor(Scanner.java:864)at java.util.Scanner.next(Scanner.java:1485)at java.util.Scanner.nextInt(Scanner.java:2117)at java.util.Scanner.nextInt(Scanner.java:2076)at LetturaIntero.main(LetturaIntero.java:11)

Cristian Consonni Laboratorio di Informatica , Lezione 4 16 / 42

Page 24: Laboratorio di Informatica Lezione 4disi.unitn.it/~consonni/teaching/labinfo-mat_2015... · Quando create una classe, la prima lettera `e Maiuscola, ad es. ... Cristian Consonni Laboratorio

Modalita di lettura da stdin (II)

Se viene inserito un valore di un tipo non corrispondendente vienecausato un errore ovvero viene lanciata un’eccezione.

Se per esempio uso input.nextInt():Inserisci un numero intero: 3.2

Exception in thread "main" java.util.InputMismatchExceptionat java.util.Scanner.throwFor(Scanner.java:864)at java.util.Scanner.next(Scanner.java:1485)at java.util.Scanner.nextInt(Scanner.java:2117)at java.util.Scanner.nextInt(Scanner.java:2076)at LetturaIntero.main(LetturaIntero.java:11)

Cristian Consonni Laboratorio di Informatica , Lezione 4 16 / 42

Page 25: Laboratorio di Informatica Lezione 4disi.unitn.it/~consonni/teaching/labinfo-mat_2015... · Quando create una classe, la prima lettera `e Maiuscola, ad es. ... Cristian Consonni Laboratorio

Modalita di lettura da stdin (III)

Esistono dei metodi per controllare il tipo di dato inserito:input.hasNextInt() ⇒ controlla che venga letto un int;input.hasNextDouble() ⇒ controlla che venga letto un double;etc.

Queste funzioni ritornano true se il prossimo valore e del tipo indicato:print("Inserisci la tua altezza (in cm): ");while (!input.hasNextInt()) {println("Il numero inserito non e un intero valido.");print("Inserisci la tua altezza (in cm): ");input.next();

}

Cristian Consonni Laboratorio di Informatica , Lezione 4 17 / 42

Page 26: Laboratorio di Informatica Lezione 4disi.unitn.it/~consonni/teaching/labinfo-mat_2015... · Quando create una classe, la prima lettera `e Maiuscola, ad es. ... Cristian Consonni Laboratorio

Outline for section 3

1 Canali standard

2 Input da tastiera

3 Output

4 Esercizi (parte I)

5 Lettura da File

6 Scrittura su File

7 Esercizi

Cristian Consonni Laboratorio di Informatica , Lezione 4 18 / 42

Page 27: Laboratorio di Informatica Lezione 4disi.unitn.it/~consonni/teaching/labinfo-mat_2015... · Quando create una classe, la prima lettera `e Maiuscola, ad es. ... Cristian Consonni Laboratorio

Scrittura su stdout (I)

Abbiamo gia visto dei comandi/funzioni per scrivere sullo standardoutput (“a schermo”):

System.out.print( stringa )

System.out.prinlnf( stringa )

System.out.printf( formato, argomenti, ...)

Cristian Consonni Laboratorio di Informatica , Lezione 4 19 / 42

Page 28: Laboratorio di Informatica Lezione 4disi.unitn.it/~consonni/teaching/labinfo-mat_2015... · Quando create una classe, la prima lettera `e Maiuscola, ad es. ... Cristian Consonni Laboratorio

Scrittura su stdout (II)

Alcune cose utili:Con printf il formato ”%nd”, dove n e un numero (intero), stampaspazi aggiuntivi in modo tale che il numero occupi sempre n spazi (siveda l’esercizio MatriceTrasposta);Con printf il formato ”%0nd”, dove n e un numero (intero), stampadegli zeri aggiuntivi in modo tale che il numero occupi sempre nspazi, ad esempio ”%03d” stampa il numero 7 come 007;altre sequenze di escape particolari sono \t per inserire unatabulazione (un numero di spazi variabile che allinea l’output lungouna data colonna)

Cristian Consonni Laboratorio di Informatica , Lezione 4 20 / 42

Page 29: Laboratorio di Informatica Lezione 4disi.unitn.it/~consonni/teaching/labinfo-mat_2015... · Quando create una classe, la prima lettera `e Maiuscola, ad es. ... Cristian Consonni Laboratorio

Outline for section 4

1 Canali standard

2 Input da tastiera

3 Output

4 Esercizi (parte I)

5 Lettura da File

6 Scrittura su File

7 Esercizi

Cristian Consonni Laboratorio di Informatica , Lezione 4 21 / 42

Page 30: Laboratorio di Informatica Lezione 4disi.unitn.it/~consonni/teaching/labinfo-mat_2015... · Quando create una classe, la prima lettera `e Maiuscola, ad es. ... Cristian Consonni Laboratorio

Esercizi (parte I) (I)

Scrivere un programma in cui:si inserire un numero intero N ≤ 10 da console;Inizializzare un array di interi di lunghezza N con i valori presi ininput da console (ciclare finche non si ottengono N valori del tipodesiderato);Dopo aver letto tutti i valori stampare progressivamente i valoriinseriti;

Cristian Consonni Laboratorio di Informatica , Lezione 4 22 / 42

Page 31: Laboratorio di Informatica Lezione 4disi.unitn.it/~consonni/teaching/labinfo-mat_2015... · Quando create una classe, la prima lettera `e Maiuscola, ad es. ... Cristian Consonni Laboratorio

Esercizi (parte I) (II)

Per esempio, se l’array inserito e il seguente {2, 5, 7, 4}. Il programmadeve ciclare sull’array stampando:

22, 52, 5, 72, 5, 7, 4

Suggerimento: sono due for annidati (uno all’interno dell’altro)utilizzate System.out.print per stampare i valori e quando uscitedal for interno stampate una riga vuota

Cristian Consonni Laboratorio di Informatica , Lezione 4 23 / 42

Page 32: Laboratorio di Informatica Lezione 4disi.unitn.it/~consonni/teaching/labinfo-mat_2015... · Quando create una classe, la prima lettera `e Maiuscola, ad es. ... Cristian Consonni Laboratorio

Outline for section 5

1 Canali standard

2 Input da tastiera

3 Output

4 Esercizi (parte I)

5 Lettura da File

6 Scrittura su File

7 Esercizi

Cristian Consonni Laboratorio di Informatica , Lezione 4 24 / 42

Page 33: Laboratorio di Informatica Lezione 4disi.unitn.it/~consonni/teaching/labinfo-mat_2015... · Quando create una classe, la prima lettera `e Maiuscola, ad es. ... Cristian Consonni Laboratorio

Lettura da file (I)

Il caso della lettura da file e simile a quello della lettura da stdin:viene creato un oggetto File che rappresenta il file nel filesystem.si usa uno Scanner come nel caso della lettura da standard input

Cristian Consonni Laboratorio di Informatica , Lezione 4 25 / 42

Page 34: Laboratorio di Informatica Lezione 4disi.unitn.it/~consonni/teaching/labinfo-mat_2015... · Quando create una classe, la prima lettera `e Maiuscola, ad es. ... Cristian Consonni Laboratorio

Lettura da file (II)

import java.io.File;import java.util.Scanner;

public class LetturaFile {public static void main(String[] args) {

File file = new File("esempio.txt");Scanner scan = new Scanner(file);

...

Si noti l’utilizzo delle due librerie:java.io.File

java.util.Scanner

Cristian Consonni Laboratorio di Informatica , Lezione 4 26 / 42

Page 35: Laboratorio di Informatica Lezione 4disi.unitn.it/~consonni/teaching/labinfo-mat_2015... · Quando create una classe, la prima lettera `e Maiuscola, ad es. ... Cristian Consonni Laboratorio

Lettura da file (II)

import java.io.File;import java.util.Scanner;

public class LetturaFile {public static void main(String[] args) {

File file = new File("esempio.txt");Scanner scan = new Scanner(file);

...

Si noti l’utilizzo delle due librerie:java.io.File

java.util.Scanner

Cristian Consonni Laboratorio di Informatica , Lezione 4 26 / 42

Page 36: Laboratorio di Informatica Lezione 4disi.unitn.it/~consonni/teaching/labinfo-mat_2015... · Quando create una classe, la prima lettera `e Maiuscola, ad es. ... Cristian Consonni Laboratorio

Percorsi (I)

Prima abbiamo indicato ”esempio.txt” come nome del file, in generalepossiamo indicare un percorso (o path).

I percorsi si specificano in modo diverso per sistemi operativi diversi:Unix (Linux, Mac OS X)/utente/unitn/informatica/lab/prova.txtWindowsC:\utente\unitn\informatica\lab\prova.txt

Il nome del file va sempre inserito completo di estensione.

Cristian Consonni Laboratorio di Informatica , Lezione 4 27 / 42

Page 37: Laboratorio di Informatica Lezione 4disi.unitn.it/~consonni/teaching/labinfo-mat_2015... · Quando create una classe, la prima lettera `e Maiuscola, ad es. ... Cristian Consonni Laboratorio

Percorsi (II)

Inoltre un percorso puo essere:relativo, se si riferisce alla cartella corrente.

i path relatvi si riferiscono alla cartella corrente (indicata con ., ..alla cartella genitore di quella corrente).in Eclipse la cartella corrente e la cartella principale del progettoall’interno del workspace.”esempio.txt” e un path relativo alla cartella corrente.

assoluto, se si riferisce alla radice del filesystem (/ su sistemi Unix,C:\ su Windows)

/utente/unitn/info/prova.txtC:\utente\unitn\info\prova.txt

Cristian Consonni Laboratorio di Informatica , Lezione 4 28 / 42

Page 38: Laboratorio di Informatica Lezione 4disi.unitn.it/~consonni/teaching/labinfo-mat_2015... · Quando create una classe, la prima lettera `e Maiuscola, ad es. ... Cristian Consonni Laboratorio

Lettura da file (III)

import java.io.File;import java.util.Scanner;

public class LetturaFile {public static void main(String[] args) {

File file = new File("esempio.txt");Scanner scan = new Scanner(file);

...

Dopo aver scritto la dichiarazione dello Scanner dovremmo avereottenuto:

un warning relativo al fatto che non chiudiamo lo scanner.un errore relativo al fatto che una eccezione non e gestita(unhandled).

Cristian Consonni Laboratorio di Informatica , Lezione 4 29 / 42

Page 39: Laboratorio di Informatica Lezione 4disi.unitn.it/~consonni/teaching/labinfo-mat_2015... · Quando create una classe, la prima lettera `e Maiuscola, ad es. ... Cristian Consonni Laboratorio

Lettura da file (III)

Scanner scan = new Scanner(file);

Possiamo risolvere il problema in due modi (vedere anche la funzionalitaquickfix attivata con il comando Ctrl + 1):

lanciare (throw) un’eccezione;gestire l’eccezione con il costrutto try - catch;

Questo avviene perche la lettura da file puo causare errori come peresempio un file non esistente oppure non accessibile.

Cristian Consonni Laboratorio di Informatica , Lezione 4 30 / 42

Page 40: Laboratorio di Informatica Lezione 4disi.unitn.it/~consonni/teaching/labinfo-mat_2015... · Quando create una classe, la prima lettera `e Maiuscola, ad es. ... Cristian Consonni Laboratorio

Lanciare un’eccezione

Se decidiamo di lanciare un’eccezione allora la dichiarazione del mainviene modificata come segue:import java.io.File;import java.io.FileNotFoundException;import java.util.Scanner;

public class LetturaFile {

... main(String[] args) throws FileNotFoundException {

File file = new File("esempio.txt");Scanner scan = new Scanner(file);...

Questa sintassi segnala che la funzione main puo terminare a causadell’errore FileNotFoundException.

Cristian Consonni Laboratorio di Informatica , Lezione 4 31 / 42

Page 41: Laboratorio di Informatica Lezione 4disi.unitn.it/~consonni/teaching/labinfo-mat_2015... · Quando create una classe, la prima lettera `e Maiuscola, ad es. ... Cristian Consonni Laboratorio

Gestire un’eccezione con try - catch

La gestione dell’eccezione con try - catch avviene nel modo seguente:import java.io.File;import java.io.FileNotFoundException;import java.util.Scanner;

public class LetturaFile {

public static void main(String[] args) {

File file = new File("esempio.txt");Scanner scan;try {scan = new Scanner(file);

} catch (FileNotFoundException e) {e.printStackTrace();return;

}

Cristian Consonni Laboratorio di Informatica , Lezione 4 32 / 42

Page 42: Laboratorio di Informatica Lezione 4disi.unitn.it/~consonni/teaching/labinfo-mat_2015... · Quando create una classe, la prima lettera `e Maiuscola, ad es. ... Cristian Consonni Laboratorio

Gestire un’eccezione con try - catch (II)

Le istruzioni nel blocco try vengono provate, se non causano erroril’esecuzione del programma prosegue normalmente, in caso di erroreviene eseguito il blocco catch:

try {scan = new Scanner(file);

} catch (FileNotFoundException e) {// Queste istruzioni vengono eseguite solo se il// blocco try ha restituito un errore del tipo// FileNotFoundExceptione.printStackTrace();return;

}

Lo scopo del blocco try - catch e quello di compiere le operazioninecessarie in conseguenza dell’errore.

Cristian Consonni Laboratorio di Informatica , Lezione 4 33 / 42

Page 43: Laboratorio di Informatica Lezione 4disi.unitn.it/~consonni/teaching/labinfo-mat_2015... · Quando create una classe, la prima lettera `e Maiuscola, ad es. ... Cristian Consonni Laboratorio

Outline for section 6

1 Canali standard

2 Input da tastiera

3 Output

4 Esercizi (parte I)

5 Lettura da File

6 Scrittura su File

7 Esercizi

Cristian Consonni Laboratorio di Informatica , Lezione 4 34 / 42

Page 44: Laboratorio di Informatica Lezione 4disi.unitn.it/~consonni/teaching/labinfo-mat_2015... · Quando create una classe, la prima lettera `e Maiuscola, ad es. ... Cristian Consonni Laboratorio

Scrittura file (I)

In modo analogo a quanto avviene per la lettura da file, per la scrittura:1 dobbiamo creare un oggetto che rappresenti il file su cui vogliamo

scrivere, esso rappresenta il file nel filesystem;2 utilizziamo la classe di Java FileWriter , questa classe si

preoccupa di preparare il file per la scrittura gestendo, per esempio,l’encoding del file.

3 creiamo un “buffer” BufferedWriter che effettivamente conterra iltesto da scrivere sul file.

4 per scrivere usiamo il metodo write() del buffer5 Quando abbiamo terminato, chiudiamo il buffer.

Cristian Consonni Laboratorio di Informatica , Lezione 4 35 / 42

Page 45: Laboratorio di Informatica Lezione 4disi.unitn.it/~consonni/teaching/labinfo-mat_2015... · Quando create una classe, la prima lettera `e Maiuscola, ad es. ... Cristian Consonni Laboratorio

Scrittura file (I)

In modo analogo a quanto avviene per la lettura da file, per la scrittura:1 dobbiamo creare un oggetto che rappresenti il file su cui vogliamo

scrivere, esso rappresenta il file nel filesystem;2 utilizziamo la classe di Java FileWriter , questa classe si

preoccupa di preparare il file per la scrittura gestendo, per esempio,l’encoding del file.

3 creiamo un “buffer” BufferedWriter che effettivamente conterra iltesto da scrivere sul file.

4 per scrivere usiamo il metodo write() del buffer5 Quando abbiamo terminato, chiudiamo il buffer.

Cristian Consonni Laboratorio di Informatica , Lezione 4 35 / 42

Page 46: Laboratorio di Informatica Lezione 4disi.unitn.it/~consonni/teaching/labinfo-mat_2015... · Quando create una classe, la prima lettera `e Maiuscola, ad es. ... Cristian Consonni Laboratorio

Scrittura file (I)

In modo analogo a quanto avviene per la lettura da file, per la scrittura:1 dobbiamo creare un oggetto che rappresenti il file su cui vogliamo

scrivere, esso rappresenta il file nel filesystem;2 utilizziamo la classe di Java FileWriter , questa classe si

preoccupa di preparare il file per la scrittura gestendo, per esempio,l’encoding del file.

3 creiamo un “buffer” BufferedWriter che effettivamente conterra iltesto da scrivere sul file.

4 per scrivere usiamo il metodo write() del buffer5 Quando abbiamo terminato, chiudiamo il buffer.

Cristian Consonni Laboratorio di Informatica , Lezione 4 35 / 42

Page 47: Laboratorio di Informatica Lezione 4disi.unitn.it/~consonni/teaching/labinfo-mat_2015... · Quando create una classe, la prima lettera `e Maiuscola, ad es. ... Cristian Consonni Laboratorio

Scrittura file (I)

In modo analogo a quanto avviene per la lettura da file, per la scrittura:1 dobbiamo creare un oggetto che rappresenti il file su cui vogliamo

scrivere, esso rappresenta il file nel filesystem;2 utilizziamo la classe di Java FileWriter , questa classe si

preoccupa di preparare il file per la scrittura gestendo, per esempio,l’encoding del file.

3 creiamo un “buffer” BufferedWriter che effettivamente conterra iltesto da scrivere sul file.

4 per scrivere usiamo il metodo write() del buffer5 Quando abbiamo terminato, chiudiamo il buffer.

Cristian Consonni Laboratorio di Informatica , Lezione 4 35 / 42

Page 48: Laboratorio di Informatica Lezione 4disi.unitn.it/~consonni/teaching/labinfo-mat_2015... · Quando create una classe, la prima lettera `e Maiuscola, ad es. ... Cristian Consonni Laboratorio

Scrittura file (I)

In modo analogo a quanto avviene per la lettura da file, per la scrittura:1 dobbiamo creare un oggetto che rappresenti il file su cui vogliamo

scrivere, esso rappresenta il file nel filesystem;2 utilizziamo la classe di Java FileWriter , questa classe si

preoccupa di preparare il file per la scrittura gestendo, per esempio,l’encoding del file.

3 creiamo un “buffer” BufferedWriter che effettivamente conterra iltesto da scrivere sul file.

4 per scrivere usiamo il metodo write() del buffer5 Quando abbiamo terminato, chiudiamo il buffer.

Cristian Consonni Laboratorio di Informatica , Lezione 4 35 / 42

Page 49: Laboratorio di Informatica Lezione 4disi.unitn.it/~consonni/teaching/labinfo-mat_2015... · Quando create una classe, la prima lettera `e Maiuscola, ad es. ... Cristian Consonni Laboratorio

Scrittura file (II)

import java.io.BufferedWriter;import java.io.File;import java.io.FileWriter;import java.io.IOException;

public class ScritturaFile {public static void main(String[] args) throws IOException {

String text = "TestoEsempio";

File file = new File("esempio.txt");FileWriter fw = new FileWriter(file);BufferedWriter bw = new BufferedWriter(fw);

bw.write(text);bw.flush();bw.close();...

Cristian Consonni Laboratorio di Informatica , Lezione 4 36 / 42

Page 50: Laboratorio di Informatica Lezione 4disi.unitn.it/~consonni/teaching/labinfo-mat_2015... · Quando create una classe, la prima lettera `e Maiuscola, ad es. ... Cristian Consonni Laboratorio

Scrittura file (III)

Ogni qual volta aggiungiamo una delle classi necessarie alla scrittura suFile Java segnala un errore che puo essere risolto aggiungengo gli importstatement necessari.

import java.io.BufferedWriter;import java.io.File;import java.io.FileWriter;import java.io.IOException;

Cristian Consonni Laboratorio di Informatica , Lezione 4 37 / 42

Page 51: Laboratorio di Informatica Lezione 4disi.unitn.it/~consonni/teaching/labinfo-mat_2015... · Quando create una classe, la prima lettera `e Maiuscola, ad es. ... Cristian Consonni Laboratorio

Scrittura file (V)

Anche quando aggiungiamo il FileWriter dobbiamo preparci a gestirel’eccezione, in questo caso segnaliamo il fatto che il main puo generareuna IOException.

public class ScritturaFile {

public static void main(String[] args) throws IOException {

String text = "TestoEsempio";

File file = new File("esempio.txt");FileWriter fw = new FileWriter(file);BufferedWriter bw = new BufferedWriter(fw);

Cristian Consonni Laboratorio di Informatica , Lezione 4 38 / 42

Page 52: Laboratorio di Informatica Lezione 4disi.unitn.it/~consonni/teaching/labinfo-mat_2015... · Quando create una classe, la prima lettera `e Maiuscola, ad es. ... Cristian Consonni Laboratorio

Scrittura file (VI)

public class ScritturaFile {

public static void main(String[] args) throws IOException {

String text = "TestoEsempio";

File file = new File("esempio.txt");FileWriter fw = new FileWriter(file);BufferedWriter bw = new BufferedWriter(fw);

bw.write(text);// Forza lo svuotamento del buffer e la scrittura su// filebw.flush();bw.close();

}}

Cristian Consonni Laboratorio di Informatica , Lezione 4 39 / 42

Page 53: Laboratorio di Informatica Lezione 4disi.unitn.it/~consonni/teaching/labinfo-mat_2015... · Quando create una classe, la prima lettera `e Maiuscola, ad es. ... Cristian Consonni Laboratorio

Outline for section 7

1 Canali standard

2 Input da tastiera

3 Output

4 Esercizi (parte I)

5 Lettura da File

6 Scrittura su File

7 Esercizi

Cristian Consonni Laboratorio di Informatica , Lezione 4 40 / 42

Page 54: Laboratorio di Informatica Lezione 4disi.unitn.it/~consonni/teaching/labinfo-mat_2015... · Quando create una classe, la prima lettera `e Maiuscola, ad es. ... Cristian Consonni Laboratorio

Esercizi (I)

Scrivere un programma che apra il file “esercizio01.txt” (scaricateloda qui http://bit.ly/esercizi-labinfo e inseritelo nella cartella principaledel progetto)Il file contiene una serie di array di interi, la prima riga indica il numero dielementi per riga, mentre le righe successive sono effettivamente gli array.Stampate a video il massimo di ciascuna riga e alla fine il valore massimo totale.

Esempio di input:81 2 9 5 7 12 2 34 9 1 5 8 14 5 60 6 11 5 9 2 6 0

Cristian Consonni Laboratorio di Informatica , Lezione 4 41 / 42

Page 55: Laboratorio di Informatica Lezione 4disi.unitn.it/~consonni/teaching/labinfo-mat_2015... · Quando create una classe, la prima lettera `e Maiuscola, ad es. ... Cristian Consonni Laboratorio

Esercizi (II)

Scrivere un programma che apra il file ”divina.txt” (scaricatelo dahttp://bit.ly/esercizi-labinfo e inseritelo nella cartella principale delprogetto);Il file contiene il primo capitolo della divina commedia. Leggete linea per linea,contando il numero di ”a”, ”e”, ”i”, ”o”, ”u”;Una volta letto tutto il file, create un nuovo file chiamato “risultati.txt” in cuiscriverete il numero di ”a”, ”e”, ”i”, ”o”, ”u” presenti;

Suggerimento:utilizzate 5 variabili diverse o un array da 5 elementi, come preferite)scorrete la stringa e controllate carattere per carattere con il metodo

nomeStringa.charAt(indice)

Cristian Consonni Laboratorio di Informatica , Lezione 4 42 / 42