1 Input / Output Spesso un programma deve acquisire dati da una sorgente esterna o inviare informazioni a una destinazione esterna. L’informazione puo’

Slides:



Advertisements
Presentazioni simili
Java base V: La gestione delle Eccezioni
Advertisements

IL PACKAGE java.io Il package java.io definisce quattro
Socket Java Alberto Ferrari.
© 2007 SEI-Società Editrice Internazionale, Apogeo Unità A2 Java: le basi del linguaggio.
Java Stream e File.
Java Stream e File. La classe File Per operare con lintero file java mette a disposizione la classe File Per utilizzare la classe File è necessario importare.
Recupero debito quarto anno Primo incontro
Universita di Camerino
Capitolo 8 Array Lucidi relativi al volume: Java – Guida alla programmazione James Cohoon, Jack Davidson Copyright © The McGraw-Hill Companies srl.
MATLAB.
MATLAB. Scopo della lezione Programmare in Matlab Funzioni Cicli Operatori relazionali Esercizi vari.
LIP: 4 Aprile 2008 ECCEZIONI. Eccezioni Come si definiscono eccezioni Come si lanciano Come si gestiscono (gestione esplicita o di default)
LIP: 19 Aprile Contenuto Soluzione Compitino Tipo di dato MultiSet, estensione con sottoclasse.
LIP: 1 Marzo 2005 Classe Object e Vettori. Partiamo da Lesercizio dellultima esercitazione realizzato tramite array Vedremo come si puo fare in modo piu.
Argomenti dalla linea dei comandi Gli argomenti possono essere passati a qualsiasi funzione di un programma, compresa la main(), direttamente dalla linea.
Eccezioni Dott. Ing. Leonardo Rigutini Dipartimento Ingegneria dellInformazione Università di Siena Via Roma 56 – – SIENA Uff
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE File Marco D. Santambrogio – Ver. aggiornata al 9 Maggio 2012.
Fisica Computazionale I - 51 OPERAZIONI DI INPUT/OUTPUT Le operazioni di input/output sono estremamente complesse perche' implicano una sostanziale interazione.
1 Corso di Laurea in Biotecnologie Informatica (Programmazione) Introduzione a JAVA Anno Accademico 2009/2010.
Corso di Laurea in Biotecnologie Informatica (Programmazione)
Introduzione agli stream e alle classi
Scomposizione di stringhe
AA 2005/06 Informatica Programmazione M.A. Alberti-L. Capra 1 Le eccezioni in Java Programmazione Corso di laurea in Informatica.
Programmazione Corso di laurea in Informatica
AA2003/04 © M.A. Alberti Programmazione Eccezioni 1 Le eccezioni in Java Programmazione Corso di laurea in Informatica.
Selezione (=scelta) con “if-else”
Eccezioni.
Concetti di informatica e fondamenti di Java, 4 ed.Apogeo ©2007 Capitolo 11 Ingresso/uscita e gestione delle eccezioni Cay S. Horstmann Concetti di informatica.
1 LINUX: struttura generale The layers of a UNIX system. User Interface.
I File.
Lezione XII Laboratorio di Programmazione. Eccezioni Per la gestione di operazioni che possono non andare a buon fine il C++ mette a disposizione un sistema.
GESTIONE DEGLI ERRORI Spesso vi sono istruzioni critiche, che in certi casi possono produrre errori. Lapproccio classico consiste nellinse- rire controlli.
JAVA E LA RETE L’architettura Java è network-ready
Programmazione in Java
Programmazione in Java (9) Mauro Lorenzutti. 30/09/2005Corso Java - Mauro Lorenzutti2 Scaletta I/O Evoluto Serializzazione Comunicazioni via socket JUnit.
Cosa è una applicazione distribuita?
ISTITUTO STATALE DI ISTRUZIONE SUPERIORE F. ENRIQUES CORSO JAVA – PROVA INTERMEDIA DEL 12 MARZO 2007 NOME: COGNOME: ________________________________________________________________________________.
1 Gestione dei File. 2 Perché i file? Sono strutture dati persistenti Sono solitamente memorizzati sui dischi –Si usano dall'interno dei programmi Realizzano.
1 Lucidi delle esercitazioni di Sistemi di Elaborazione in Rete Università degli Studi della Calabria Corso di Laurea in Ingegneria Gestionale A.A. 2003/2004.
BIOINFO3 - Lezione 331 SUBROUTINE IN PERL Una subroutine (funzione, metodo, procedura o sottoprogramma), e` una prozione di codice all`interno di un programma.
ISTITUTO STATALE DI ISTRUZIONE SUPERIORE F. ENRIQUES CORSO JAVA – PROVA FINALE DEL 21 MAGGIO 2007 NOME: COGNOME: ________________________________________________________________________________.
Corso JAVA Lezione n° 12 Istituto Statale di Istruzione Superiore “F. Enriques”
ISTITUTO STATALE DI ISTRUZIONE SUPERIORE F. ENRIQUES CORSO JAVA – PROVA INTERMEDIA DEL 12 MARZO 2007 NOME: COGNOME: ________________________________________________________________________________.
Conversione da base 10 a base X (Utilizzo della pila)
Le eccezioni F. Bombi 01/11/ Errori e situazioni impreviste situazioni eccezionali In un programma situazioni eccezionali possono.
Appunti di Java (J2SDK 1.4.2, JDK 1.6.0) prof. Antonella Schiavon settembre 2009.
Astrazione procedurale ed eccezioni
ESERCITAZIONE 12 ESERCIZIO 2 14/05/2014. Consegne 1/4 Definire la classe MyBufferedReader che estende la classe BufferedReader, implementando il metodo.
Ingresso e uscita in Java F. Bombi 10 ottobre 2002.
Argomenti della lezione
Esercitazione su Vector. Permette di definire collezioni di dati generiche, che sono in grado di memorizzare elementi di ogni sottotipo di Object Definito.
Capitolo 6 Iterazione Lucidi relativi al volume: Java – Guida alla programmazione James Cohoon, Jack Davidson Copyright © The McGraw-Hill Companies.
Eccezioni Metodi parziali Eccezioni: Usi e Metodi parziali Eccezioni: rimuovere i requires Eccezioni: rimuovere i requires Eccezioni: definizione, sollevamento,
Corso di Laurea Ingegneria Informatica Fondamenti di Informatica
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE File Marco D. Santambrogio – Ver. aggiornata al 21 Maggio 2014.
1 Eccezioni in Java. 2 Ricordiamo che 4 una procedura può terminare –normalmente, ritornando un risultato –in modo eccezionale ci possono essere diverse.
Gestione dei thread in Java
Input-Output 16 Maggio Nei programmi sviluppati sino ad oggi abbiamo usato * output su schermo (con System.out.print e System.out.print ) * input.
10/12/2004Laboratorio di Programmazione - Luca Tesei1 Gestione delle eccezioni.
LIP: 22 Marzo 2005 Eccezioni. Eccezioni-Richiami Come si definiscono eccezioni Come si lanciano Come si gestiscono (gestione esplicita o di default)
10/10/20021 Ingresso e uscita in Java F. Bombi 10 ottobre 2002.
1 Input / Output Spesso un programma deve acquisire dati da una sorgente esterna o inviare informazioni a una destinazione esterna. L’informazione può.
13/08/02Input 1 Interagire con il computer Da tastiera Da riga di comando Funzioni di conversione.
6/11/01Ordinamento 1 Un esempio di algoritmi: ordinamento.
1 Metodo I metodi sono uno strumento che i programmatori usano per strutturare i programmi, sia per renderli più facili da capire che per permettere il.
Stringhe in Java. Definire una stringa. Definire una stringa in Java Il modo più semplice e diretto per creare un oggetto di tipo String è assegnare alla.
Input in Java. Uso Scanner Un oggetto per la lettura dalla tastiera Piuttosto, per rappresentare la tastiera del nostro calcolatore useremo un oggetto.
Eccezioni in Java. Le eccezioni in Java Exception handling: insieme di costrutti e regole sintattiche e semantiche presenti nel linguaggio allo scopo.
Eccezioni – Precisazioni e approfondimenti
Transcript della presentazione:

1 Input / Output Spesso un programma deve acquisire dati da una sorgente esterna o inviare informazioni a una destinazione esterna. L’informazione puo’ essere di ogni tipo: caratteri, immagini, suoni, oggetti.

2 Input / Output Stream di Input / Output Per acquisire dati, un programma apre uno stream associato alla sorgente di informazione (file, socket, memoria, ecc.) e legge l’informazione sequenzialmente da esso. In modo analogo, un programma puo’ inviare verso una destinazione esterna dei dati aprendo uno stream associato alla destinazione e scrivendovi in modo sequenziale i dati. Indipendentemente dall’origine e dalla destinazione dei dati e dal loro tipo, gli algoritmi per leggere e scrivere sequenzialmente dei dati sono gli stessi.

3 Stream di Input / Output

4 Input / Output LetturaScrittura Apertura dello stream Finché e’ presente informazione leggi l’informazione Chiudi lo stream Apertura dello stream Finché e’ presente informazione scrivi l’informazione Chiudi lo stream

5 Tipi di Stream Le classi di gestione degli stream si dividono sono di due tipi in base al tipo di dato su cui operano. Stream di Caratteri: classi Reader e Writer Stream di Byte: classi InputStream e OutputStream (di solito usati per leggere file di immagini e suoni). Le classi InputStreamReader e OutputStreamWriter consentono di trasformare stream di byte in stream di caratteri. Un InputStreamReader legge byte e li converte in caratteri. Le classi BufferedReader e BufferedWriter vengono utilizzate per leggere/scrivere blocchi di dati (caratteri a 16 bit) riducendo cosi’ il numero di accessi alla sorgente/destinazione. BufferedReader(Reader in) BufferedWriter(Writer out)

6 Gestione di Stream di caratteri

7 Gestione di Stream di byte

8 La classe System Talvolta un programma richiede l’accesso alle risorse del sistema, allo standard output, allo standard input, ecc. La piattaforma Java consente di effettuare l’accesso alle risorse del sistema attraverso l’uso della classe System. La classe System fornisce lo stream in (di tipo InputStream ) associato allo standard input, lo stream out associato allo output e lo stream err associato allo standard error. Inoltre contiene alcuni metodi che svolgono diversi compiti. Ad esempio il metodo currentTimeMillis() fornisce il tempo in millisecondi (a partire dal 1/1/1970), il metodo exit(int status) interrompe l’interpretazione del programma, ecc.

9 FileReader Normalmente un flusso viene creato a partire da un file su disco. Per interagire con un file di caratteri occorre quindi creare un oggetto di tipo FileReader FileReader(String fileName) esistono anche altri costruttori Esempio: FileReader in = new FileReader(“nome-file”);

10 java.lang.Object | +--java.io.Readerjava.io.Reader | +--java.io.InputStreamReaderjava.io.InputStreamReader | +--java.io.FileReader FileReader public FileReader(String fileName)String throws FileNotFoundExceptionFileNotFoundException Crea un nuovo FileReader, per leggere dal file il cui nome viene passato come parametro. Parametri : FileName – nome del file da leggere Throws: FileNotFoundException – se il file specificato non esiste

11 BufferedReader Un BufferedReader permette di gestire un flusso tramite un buffer: I dati vengono letti a blocchi dal flusso e memorizzati in un buffer Quando viene richiesto un nuovo dato prima si verifica la sua disponibilità nel buffer, se non disponibile si legge un nuovo blocco Metodi disponibili in aggiunta a quelli di Reader String readLine() Legge una riga e la restituisce sotto forma di stringa Costruttori disponibili BufferedReader(Reader in) Crea un oggetto BufferedReader a partire da un oggetto Reader

12 Copia di un file 1.// dal java-tutorial 2. 3.import java.io.*; 4. 5.public class Copy { 6. public static void main(String[] args) { 7. FileReader in = new FileReader(args[0]); 8. FileWriter out = new FileWriter(args[1]); 9. int c; while ((c = in.read()) != -1) 12. out.write(c); in.close(); 15. out.close(); 16. } 17.}

13 Copia di un file Copy.java:7: Exception java.io.FileNotFoundException must be caught, or it must be declared in the throws clause of this method. FileReader in = new FileReader(args[0]); ^ Copy.java:8: Exception java.io.IOException must be caught, or it must be declared in the throws clause of this method. FileWriter out = new FileWriter(args[1]); ^ 2 errors

14 Copia di un file 1.import java.io.*; 2. 3.public class Copy { 4. public static void main(String[] args) { 5. try { 6. FileReader in = new FileReader(args[0]); 7. FileWriter out = new FileWriter(args[1]); int c; 10. while ((c = in.read()) != -1) 11. out.write(c); 12. } 13. catch(FileNotFoundException e) { 14. System.err.println(e); 15. System.exit(1); 16. } 17. catch(IOException e) { 18. System.err.println(e); 19. System.exit(1); 20. } 21.…

15 Copia di un file Copy.java:19: : Exception java.io.IOException must be caught, or it must be declared in the throws clause of this method. while ((c = in.read()) != -1) ^ 1 error

16 Copia di un file 1.// dal java-tutorial 2. 3.import java.io.*; 4. 5.public class Copy { 6. public static void main(String[] args) 7. throws IOException { 8. FileReader in = new FileReader(args[0]); 9. FileWriter out = new FileWriter(args[1]); 10. int c; while ((c = in.read()) != -1) 13. out.write(c); in.close(); 16. out.close(); 17. } 18.}

17 Copia di un file 1.// dal java-tutorial 2. 3.import java.io.*; 4. 5.public class CopyBytes { 6. public static void main(String[] args) 7. throws IOException { 8. FileInputStream in = new FileInputStream(args[0]); 9. FileOutputStream out = new FileOutputStream(args[1]); 10. int c; while ((c = in.read()) != -1) 13. out.write(c); in.close(); 16. out.close(); 17. } 18.}

18 PrintStream La classe PrintStream mette a disposizione i metodi print e println utilizzabili con qualunque tipo di parametro. Si può creare un nuovo oggetto PrintStream a partire da un OutputStream, in particolare da un FileOutputStream. PrintStream f = new PrintStream( new FileOutputStream(“nome-file”) ); Gli oggetti System.out e System.err sono di tipo PrintStream

19 Classe File Serve per ottenere informazioni riguardo un file, non tratta file aperti Nota bene: Creare un oggetto ti tipo File non significa creare un file fisico Costruttori disponibili File(String pathname) Crea un oggetto di tipo File a partire da una stringa (il pathname) File(File parent, String child) Crea un oggetto di tipo File avente come nome child a partire dalla directory parent (descritta tramite un oggetto di tipo File ) File(String parent, String child) Crea un oggetto di tipo File avente come nome child a partire dalla directory parent

20 Proprietà di un file 1.import java.io.File; 2. 3.public class FileInfo { public static void main(String[] args) 6. throws java.io.IOException { 7. File f = new File("FileInfo.class"); 8. System.out.println(f.exists()); 9. System.out.println(f.isFile()); 10. System.out.println(f.isDirectory()); 11. System.out.println(f.canRead()); 12. System.out.println(f.canWrite()); 13. System.out.println(f.length()); 14. System.out.println(f.getAbsolutePath()); 15. System.out.println(f.getName()); 16. System.out.println(f.getParent()); 17. File p = new File(f.getAbsolutePath()); 18. System.out.println(p.getParent()); 19. } 20.} true false true True 919 E:\Prove\FileInfo.class FileInfo.class null E:\Prove

21 File Metodi disponibili boolean delete() Cancella il file o la directory specificata boolean mkdir() Crea la directory boolean renameTo(File dest) Cambia nome al file String[] list() Restituisce un vettore con i nomi dei file della directory riferita dall’oggetto File File[] listFiles() Restituisce un vettore con gli oggetti File che fanno riferimento ai file della directory riferita dall’oggetto File …

22 Listato di una directory 1.import java.io.File; 2. 3.public class Lista { 4. 5.public static void main(String[] args) { 6. File workingDir = new File("."); 7. String[] lista = workingDir.list(); 8. for(int i=0; i<lista.length; i++) { 9. System.out.println(lista[i]); 10. } 11.} } Lista.java Lista.class Copy.java Copy.class FileInfo.java FileInfo.class Provare a creare un equivalente del comando ls -l

23 Eccezioni Un’eccezione è un oggetto che descrive una situazione inusuale o erronea. Le eccezioni vengono lanciate da un programma o dalla macchina virtuale, e possono, se lo si desidera essere intercettate e gestite. Si puo’ gestire un’eccezione nei seguenti tre modi: Non gestire l’eccezione; Gestire l’eccezione non appena si verifica; Gestire l’eccezione in un altro punto del programma.

24 Gestione delleEccezioni Se un’eccezione viene ignorata dal programma, allora il programma stesso verra’ interrotto producendo un messaggio di errore opportuno. Il messaggio include il tipo di eccezione lanciata e la pila delle chiamate che consentono di individuare il punto del programma in cui l’eccezione si e’ verificata.

25 Il blocco try Per gestire un’eccezione occorre inserire l’istruzione che puo’ lanciare l’eccezione all’interno di un blocco try. Un blocco try e’ seguito da una o piu’ clausole catch che contengono le istruzioni che servono a gestire la/e eccezione/i. Ogni clausola catch e’ associata ad un tipo di eccezione. Ogni blocco try puo’ avere piu’ clausole catch associate. Ogni clausola catch viene detta gestore di eccezioni. Quando viene eseguito un blocco try, vengono eseguite tutte le istruzioni contenute nel blocco. Se non si verificano eccezioni, l’esecuzione continua poi con le istruzioni che seguono il blocco try (dopo la clausola catch ). Se si verifica un’eccezione all’interno di un blocco try, il controllo passa al gestore di eccezioni appropriato. Dopo l’esecuzione delle istruzioni della clausola catch, il controllo passa alle istruzioni che seguono l’intero blocco try - catch.

26 Gestione delle eccezioni Se un’eccezione non viene intercettata e gestita quando si verifica, il controllo viene immediatamente restituito al metodo che ha invocato il metodo che l’ha prodotta. Le eccezioni si propagano finchè si incontra un metodo che intercetta e gestisce l’eccezione, oppure finchè non termina anche il metodo main. Per intercettare un’eccezione ad un livello piu’ esterno, il metodo che produce l’eccezione deve essere invocato all’interno di un blocco try che possieda la clausola catch appropriata per gestirla. Le eccezioni possono essere lanciate da un metodo al chiamante con la clausola throws che segue l’intestazione della definizione del metodo. La clausola throws serve per indicare che quel metodo puo’ lanciare o propagare una particolare eccezione, se si verifica. public static void main(String[] args) throws IOException {

27 Eccezioni controllate Le eccezioni controllate richiedono che il metodo in cui si possono verificare le intercetti e le gestisca direttamente o le elenchi nella clausola throws.

28 Esempio di eccezioni 1.import java.io.*; 2. 3.public class ProvaEccezione { private String d; public ProvaEccezione(String dati) { 8. d = dati; 9. } public static ProvaEccezione[] leggiFile(String fileName) 12. throws IOException { 13. ProvaEccezione[] dati = new ProvaEccezione[50]; File f = new File(fileName); 16. if(!f.canRead()) { 17. throw new IOException("Il file "+fileName+" non e' leggibile"); 18. } 19. BufferedReader in = new BufferedReader(new FileReader(f)); 20. for(int i=0; i<dati.length; i++) { 21. String line = in.readLine(); 22. if(line == null) throw new EOFException( 23. "Incontrato EOF durante la lettura di "+fileName); 24. dati[i] = new ProvaEccezione(line); 25. } 26. in.close(); 27. return dati; 28. } 29.}

29 Esempio di eccezioni 1.import java.io.*; 2. 3.public class ProvaEccezione { public static final String 6. msg = "Durante la lettura si e' incontrato il seguente errore:\n“, 7. prompt = "vuoi leggere un altro file? "; public static void main(String[] args) { 10. String fileName = args.length>0 ? args[0] : "ProvaEccezione.java"; 11. while(fileName != null && fileName.length()>0) { 12. try { 13. leggiFile(fileName); 14. break; 15. } 16. catch(IOException e) { 17. System.out.println(msg+e.getMessage()); 18. fileName = MyUtility.readLine(prompt).trim(); 19. } 20. } 21. } }

30 Clausola finally Al blocco try si puo’ associare la clausola opzionale finally che definisce una sezione di codice che viene eseguita indipendentemente da come si sia usciti dal blocco try. Spesso si utilizza per gestire risorse o per garantire che alcune parti dell’algoritmo vengano eseguite comunque.

31 Classe StringTokenizer La classe StringTokenizer class e’ definita nel package java.util. Un oggetto StringTokenizer separa una stringa in sottostringhe dette token. Per default, il tokenizer separa la stringa ad ogni spazio. Il costruttore StringTokenizer richiede come parametro la stringa da separare. Ciascuna chiamata al metodo nextToken restituisce il token successivo.

32 public void write () { PrintWriter out = null; try { out = new PrintWriter(new FileWriter("OutFile.txt")); for (int i = 0; i < n; i++) out.println("Value at: " + i + " = " + v[i]); } catch (ArrayIndexOutOfBoundsException e) { System.err.println("ArrayIndexOutOfBoundsException: " + e.getMessage()); } catch (IOException e) { System.err.println("IOException: " + e.getMessage()); } finally { if (out != null) { System.out.println("Closing PrintWriter"); out.close(); } else { System.out.println("PrintWriter not open"); }

33 // MyUtility import java.io.*; public class MyUtility{ private static BufferedReader console=new BufferedReader(new InputStreamReader(System.in)); public static String readLine(String prompt) { try { System.out.println(prompt); return console.readLine(); } catch(IOException e) { System.err.println(e); System.exit(1); } return null; }