Lettura e scrittura - Stream



Documenti analoghi
Lettura e scrittura - Stream

INPUT OUTPUT

A. Ferrari Java: Stream e File

Informatica. Prof. A. Longheu. Input e Output

Corso sul linguaggio Java

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

A. Ferrari Stream e File

Programmazione ad Oggetti

LETTURA DI DATI DA INPUT

Lezione 16 programmazione in Java

Creazione, eliminazione, lettura e scrittura di file di testo

Fondamenti di Informatica C Esercitazioni di Laboratorio / 4 Outline

LETTURA E SCRITTURA DI FILE

Corso sul linguaggio Java

Agent and Object Technology Lab Dipartimento di Ingegneria dell Informazione Università degli Studi di Parma. Ingegneria del software A

I/O Streams in Java. Lorenzo Gallucci

Input/Output in Java

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

La paninoteca. Mi resta da scrivere solo costo()

Input/Output in Java

Java I/O e serializzazione

Gestione di file in Java

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

Variabili e Metodi di classe Interfacce e Package File in Java

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:

Corso sul linguaggio Java

File e Stream In Java. Prof. Francesco Accarino IIS Sesto San Giovanni Via Leopardi 132

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

Note ed esercizi aggiuntivi

Riassunto. Rassegna API - 2: eccezioni e file. Eccezioni. Oggi. Gettare. Gettare, catturare, rimbalzare. Stefano Mizzaro 1

Laboratorio di reti I: Java IO

Riassunto. Rassegna API - 2: eccezioni e file. Eccezioni. Oggi. Gettare, catturare, rimbalzare. Gettare. Stefano Mizzaro 1

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

Laboratorio Reti di Calcolatori Laurea Triennale in Comunicazione Digitale. Anno Accademico 2012/2013

Creazione, eliminazione, lettura e scrittura di file di testo

Il linguaggio Java I file sequenziali

02CBI - M. Morisio. I/O in Java. Input Output. Classi di Primo Livello - java.io. Stream. Pag. 1

Socket (TCP/IP) Socket (TCP/IP) Concetto di socket. Cenni (reti)

Java I/O e serializzazione

Unità 2 I file binari

Le classi FileInputStream e RandomAccessFile. Semplici Algoritmi di Ordinamento

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

Il linguaggio Java. Gli stream

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

Gestione dell I/O su File

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

Input/Output. Introduzione. Stream. Capitolo 10 LORENZO BETTINI

Eccezioni Precisazioni e approfondimenti

Programmazione Orientata agli Oggetti in Linguaggio Java

Server Sequenziale. Server Concorrente. Esercitazione: Socket Java con connessione

domenica 9 giugno 13 Serializzazione

ESERCIZIO 1 (FILE DI TESTO)

Esercitazioni di FONDAMENTI DI INFORMATICA MODULO B

RETI DI CALCOLATORI Linguaggio Java: Eccezioni

Java I/O API. Java I/O. G. Grossi. 10 gennaio G. Grossi Lezione 11

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

789:;<:' .&+/"0&12%34%5&66+,("%3787%% %"+&%88$77%9%8:$:7%% ;<'&12%8%=,+>"%3787 % % % %"+&%88$77%9%8:$:7%

Introduzione. Java. Streams. Streams

Flussi, lettori e scrittori

Programmazione distribuita in Java. Socket & Client-Server

Lezione 18 Le classi per l'input/output nel pacchetto java.io

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

Indice. 1 Java I/O API. Indice

Principi, Modelli e Applicazioni per Sistemi Distribuiti M

Un flusso (stream) è una astrazione che produce e/o consuma informazioni.

Programmazione in Java e gestione della grafica. Lezione 24

Informatica I. Ingegneria Medica. Prof. Diego Salamon

Java: la libreria delle classi

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

Sockets in Java. Lorenzo Gallucci

Fondamenti di Informatica

Caratteri Input da Console

Comunicare'con'il'mondo

FONDAMENTI DI INFORMATICA C Linguaggio Java: Eccezioni

argomen> PACKAGE DI I/O Gli STREAM: conce0 di base STREAM di byte STREAM di cara8eri Ges9one di File (classe File) Serializzazione 02/11/14

19 - Eccezioni. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo

Esercitazioni Ingegneria del So2ware 3 - Programmazione Java Excep<ons, I/O

Unità A1 I file testo

Eccezioni. Corso di Programmazione CdS: Informatica e Tecnologie per la Produzione di Software Nicola Fanizzi.

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

Eccezioni. Comportamento di default (esempio) Propagazione delle eccezioni

Corso sul linguaggio Java

Gestire le eccezioni. Lezione XI

IL PACKAGE java.io CONCETTO BASE: LO STREAM

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

Laboratorio di Programmazione II Corso di Laurea in Bioinformatica Dipartimento di Informatica - Università di Verona

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

Il sistema I/O di Java

Gerarchia delle classi Classi astratte Interfacce (Eccezioni) Laboratorio di Programmazione - Esercitazio 1

PACKAGE DI I/O. Dott. Riccardo Zese.

Note ed esercizi aggiuntivi

PROVA FINALE Ingegneria del software

Java I/O. Corso di Programmazione CdS: Informatica e Tecnologie per la Produzione di Software Nicola Fanizzi.

Input e Output in Java

Sommario. I Uso degli oggetti 39

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

Transcript:

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 gli stream " Lettura: Reader e InputStream " Scrittura: Writer e OutputStream! Sottoclassi specializzate! Filtri! Stream particolari " Standard I/O " File " Stream associati ai socket -> Programmazione di rete 1: Java - Stream 1 Generalità! Stream: canale di comunicazione tra un programma (Java) e una sorgente (destinazione) da cui importare (verso cui esportare) dati! L informazione viene letta (scritta) serialmente, con modalità FIFO 1: Java - Stream 2

Generalità/2! Accesso sequenziale in lettura e scrittura! FIFO! Read Only o Write Only: servono due stream per un canale bi-direzionale! Bloccanti! Quasi tutti i metodi possono generare eccezioni! Il package java.io contiene classi che implementano gli stream Lettura!"#$%&'%()#*+, -.$&*%/0$%('1'%+10'#+ 2+)$3 %%%%%%%%&*66$%2+)' 0.$52$%&'%()#*+, Scrittura!"#$%&'%()#*+, -.$&*%/0$%('1'%+10'#+ 2+)$3 %%%%%%%%(0#$4$%2+)' 0.$52$%&'%()#*+, 1: Java - Stream 3 Tipi di Stream! Due gerarchie di classi: " Stream di caratteri: servono a leggere/scrivere sequenze di caratteri UNICODE a 16 bit " Stream di byte: servono a leggere/scrivere sequenze di byte (tipicamente dati) 1: Java - Stream 4

Stream di caratteri! Implementati dalle superclassi astratte Reader e Writer! Reader: contiene una parziale implementazione e le API (metodi e campi) per realizzare stream che leggono caratteri! Writer: contiene una parziale implementazione e le API (metodi e campi) per realizzare stream che scrivono caratteri! Sottoclassi di Reader e Writer implementano stream specializzati (vedi prossima slide) 1: Java - Stream 5 Stream di caratteri/2! Classi grigie: leggono/scrivono e basta! Classi bianche: compiono anche qualche tipo di elaborazione 1: Java - Stream 6

Stream di byte! Implementati dalle superclassi astratte InputStream e OutputStream! InputStream: contiene una parziale implementazione e le API (metodi e campi) per realizzare stream che leggono byte! OutputStream: contiene una parziale implementazione e le API (metodi e campi) per realizzare stream che scrivono byte! Sottoclassi di InputStream e OutputStream implementano stream specializzati (vedi prossima slide) 1: Java - Stream 7 Stream di byte/2! Classi grigie: leggono/scrivono e basta! Classi bianche: compiono anche qualche tipo di elaborazione 1: Java - Stream 8

Lettura Classe Reader! Costruttore: protected Reader();! Metodi principali: " public int read() throws IOException: Legge e restituisce il singolo carattere oppure 1 se arriva alla fine " public int read(char[] cbuf) throws IOException: cbuf è il buffer di destinazione Legge caratteri dallo stream in cbuf finché l array è pieno, si verifica un errore o lo stream è finito Restituisce no. caratteri letti o 1 se si raggiunge la fine dello stream " public abstract int read(char cbuf[], int off, int len) throws IOException: cbuf è il buffer di destinazione off è la posizione iniziale in cbuf a partire dalla quale scrivere len è il numero max di caratteri da leggere Restituisce il no. di caratteri letti o 1 se lo stream è finito " public abstract void close() throws IOException: Chiude lo stream 1: Java - Stream 9 Lettura Classe InputStream! Costruttore: public InputStream();! Definisce gli stessi metodi, ma per leggere byte e array di byte: " public int read() throws IOException: " public int read(byte[] cbuf) throws IOException: " public abstract int read(char cbuf[], int off, int len) throws IOException: " public abstract void close() throws IOException: 1: Java - Stream 10

Scrittura Classe Writer! Costruttore: protected Writer();! Metodi principali: " public void write(int!c) throws IOException " public void write(char[]!cbuf) throws IOException " public abstract void write(char[]!cbuf, int!off, int!len) throws IOException cbuf: array di caratteri off: posizione da cui cominciare a scrivere len: No. caratteri da scrivere " public abstract void flush() throws IOException: svuota immediatamente il buffer (cbuf). Prosegui a cascata " public abstract void close() throws IOException: chiude lo stream 1: Java - Stream 11 Scrittura Classe OutputStream! Costruttore: public OutputStream();! Metodi principali: " public void write(byte[]!b) throws IOException: scrive i b.length() byte di b sullo stream " public void write(byte[]!b, int!off, int!len) throws IOException b: array di byte off: posizione da cui cominciare a scrivere len: No. byte da scrivere " public abstract void write(int!b) throws IOException " public abstract void flush() throws IOException: svuota immediatamente il buffer (b) " public abstract void close() throws IOException: chiude lo stream 1: Java - Stream 12

Estensioni degli stream - Filtri! Caratteristiche fondamentali dei filtri: " Sono classi derivate da InputStream e OutputStream " Si attaccano a un InputStream o OutputStream: chiamare write() su un filtro significa chiamare anche write() sull OutputStream attaccato " E possibile combinare in serie diversi filtri ottenendo combinazioni potenti " In pratica, si usano sottoclassi di FilterOutputStream e FilterInputStream FilterOutputStream OutputStream InputStream FilterInputStream 1: Java - Stream 13 BufferedInputStream/ BufferedOutputStream! Realizzano buffering per rendere più efficienti le operazioni di I/O su stream di byte! I costruttori accettano un InputStream/OutputStream e realizzano un nuovo stream che fa I/O efficientemente! I metodi sono sostanzialmente gli stessi (comunque controllare!!) " public BufferedInputStream(InputStream in); dimensione default buffer 512 byte " public BufferedInputStream(InputStream in,int size); " public BufferedOutputStream(OutputStream out); dimensione default buffer 512 byte " public BufferedOutputStream(OutputStream out,int size);! BufferedOutputStream implementa flush() 1: Java - Stream 14

DataInputStream/ DataOutputStream! Forniscono metodi per leggere dati di formato complesso (byte, int, stringhe ecc.) da un InputStream " public DataInputStream(InputStream in) " public DataOutputStream(OutputStream out) Notare che InputStream e OutputStream sono astratte! Metodi più importanti: " public writeboolean(boolean v) throws IOException; " public boolean readboolean() throws IOException; "... " public writechars(string s) throws IOException; " Per la lettura di stringhe è preferibile usare il metodo readline() di BufferedReader -> più avanti 1: Java - Stream 15 InputStreamReader/ InputStreamWriter! Sottoclassi di Reader/Writer! Creano un ponte tra stream a byte e a carattere " public InputStreamReader(InputStream!in): accetta un oggetto InputStream e crea un oggetto InputStreamReader (e dunque Reader) " OutputStreamWriter(OutputStream!out): accetta un oggetto di tipo OutputStream e crea un oggetto di tipo OutputStreamWriter (e dunque Writer) " Altri costruttori permettono di specificare una codifica 1: Java - Stream 16

InputStreamReader/ InputStreamWriter/2! La codifica permette di associare byte e caratteri! Esempio: i byte dello stream sottostante possono rappresentare caratteri codificati in formato UNICODE a 16 bit! In tal caso: le maiuscole vanno da u0041 a \u005a Hex char byte InputStreamReader InputStream (codifica Es. UN 16 bit) La situazione è analoga per un OutputStreamWriter 1: Java - Stream 17 BufferedReader/ BufferedWriter! Realizzano buffering per rendere più efficienti le operazioni di I/O su stream di caratteri " public BufferedReader(Reader in) " public BufferedReader(Reader in, int sz) " public BufferedWriter(Writer out) " public BufferedWriter(Writer out, int sz) sz permette di specificare la dimensione del buffer! Metodo più importante: " public String readline() throws IOException: legge una linea di testo, restituendo la stringa corrispondente 1: Java - Stream 18

System.in/System.out I/O standard! in e out sono membri (variabili statiche final) della classe finale System! in è di tipo InputStream, out di tipo OutputStream (è in realtà oggetto di classe PrintStream, una sottoclasse di OutputStream) import java.io.*; public class classelettura { public static void main(string args[]) throws IOException { InputStream stdin = System.in; String inputline; } InputStreamReader in = new InputStreamReader(stdIn); BufferedReader myreader = new BufferedReader(in); try { inputline = new String(myReader.readLine()); } catch (IOException e) {throw e;} System.out.println("Hai scritto "+inputline); } 1: Java - Stream 19 FILE! In Java sono rappresentati dalla classe FILE! Rappresentazione astratta di file e directory! Metodi per manipolare file e directory, ma non per leggere/scrivere! Per leggere/scrivere su/da un file bisogna prima associare uno stream al file! Nel seguito: " FileInputStream/FileOutputStream " Metodi utili della classe FILE " Problema: copia di file 1: Java - Stream 20

FileInputStream/ FileOutputStream! Sono sottoclassi di InputStream e OutputStream! Aprono stream di byte da/verso file! Hanno gli stessi metodi di InputStream e OutputStream! Si possono applicare i filtri (ad esempio DataInputStream e DataOutputStream) " public FileInputStream(File file) throws FileNotFoundException " public FileInputStream(String name) throws FileNotFoundException 1: Java - Stream 21 FileReader/ FileWriter! Sono sottoclassi di Reader e Writer! Aprono stream di caratteri da/verso file! Hanno gli stessi metodi di Reader e Writer! Si possono applicare i filtri (ad esempio BufferedReader e BufferedWriter) " public FileReader(File file) throws FileNotFoundException " public FileReader(String name) throws FileNotFoundException " public FileWriter(File file) throws FileNotFoundException " public FileWriter(String name) throws FileNotFoundException " public FileWriter(String name, boolean append) throws FileNotFoundException 1: Java - Stream 22

I/O da FILE! Scrivere una classe Java che apre un file testo inputfile.txt e lo copia su un file output.txt " Senza buffering " Con buffering! Scrivere una classe Java che apre un file testo e ne stampa il contenuto, riga, per riga 1: Java - Stream 23 La classe FILE! Rappresentazione astratta di file e directory! Metodi per manipolare file e directory (creare, distruggere ecc.)! Non contiene metodi per leggere/scrivere " public File(String pathname) throws NullPointerException " public File(File parent, String child) throws NullPointerException " public File(String parent, String child) throws NullPointerException! Se il file non esiste, esso è effettivamente creato solo quando si apre uno stream verso di esso 1: Java - Stream 24

La classe FILE/2! Campi più importanti: " public static final char separatorchar: restituisce il carattere (dipendente dal S. O.) che separa i nomi nelle directory! Metodi più importanti: " public boolean delete() throws SecurityException " public boolean exists() throws SecurityException " public String getabsolutepath() " public String getname() " public boolean isdirectory() " public boolean isfile() " public long length() " public String[] list() " public File[] listfiles() " public static File[] listroots() " public boolean mkdir() throws SecurityException " public boolean mkdirs() throws SecurityException! SecurityException è sottoclasse di RuntimeException 1: Java - Stream 25 Esercizio! Scrivere una classe Java con i seguenti metodi: 1. public boolean creadir(string nomedir): crea (nella directory corrente) una sottodirectory avente per nome il contenuto di nomedir. Restituisce false in caso di fallimento 2. public File creatextfile(string nomefile, String parentdir): crea un file testo nella directory specificata in parentdir. Restituisce l oggetto (il riferimento) corrispondente o null in caso di fallimento 3. public boolean writetofile(string text, File destfile): scrive il testo presente in text sul file specificato da destfile. Restituisce false in caso di fallimento! Scrivere una programma Java che, dopo aver creato una directory Prova, legga una stringa da stdin e la scriva su un file di nome provafile.txt nella directory Prova 1: Java - Stream 26