Lettura e scrittura - Stream

Slides:



Advertisements
Presentazioni simili
File system: system call e strutture dati a run-time.
Advertisements

IL PACKAGE java.io Il package java.io definisce quattro
1 Le s-espressioni. 2 Un nuovo esempio completo: le s-espressioni Sexpr 4 alberi binari (possibilmente vuoti) che hanno sulle foglie atomi (stringhe)
1 Progettazione gerarchica delle s- espressioni, utilizzando lereditarietà
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.
Interfacce Java.
12/11/2004Laboratorio di Programmazione - Luca Tesei1 Caratteri – Input da Console Il tipo char Input dallo standard input.
Capitolo 2 Nozioni fondamentali su Java Lucidi relativi al volume: Java – Guida alla programmazione James Cohoon, Jack Davidson Copyright © The McGraw-Hill.
Capitolo 2 Nozioni fondamentali su Java Lucidi relativi al volume: Java – Guida alla programmazione James Cohoon, Jack Davidson Copyright © The McGraw-Hill.
Capitolo 7 Programmazione con metodi e classi Lucidi relativi al volume: Java – Guida alla programmazione James Cohoon, Jack Davidson Copyright © 2004.
JPA Overview della tecnologia. Java Persistence Architecture Definita nella JSR-220 EJB 3.0 ( Tentativo di unificare EJB2.1 con.
Esercizio 2. Mostrare l'evoluzione dello stato (ambiente di classi, heap, pila, System.out) durante la valutazione delle seguenti dichiarazioni di classe.
Modulo sulla concorrenza
L'interfaccia socket in Java
JDK Dott. Ing. Leonardo Rigutini Dipartimento Ingegneria dellInformazione Università di Siena Via Roma 56 – – SIENA Uff
Esempio: Tombola! Parte seconda.
Unified Modeling Language class C {…} class B extends C {…} Esiste una notazione grafica per mostrare le relazioni di ereditarietà. Object StringC B Tutte.
J0 1 Marco Ronchetti - Basi di Dati Web e Distribuite – Laurea Specialitica in Informatica – Università di Trento.
Modificatori: static Variabili e metodi associati ad una Classe anziche ad un Oggetto sono definiti static. Le variabili statiche servono come singola.
Richiami di TCP Networking in Java Elementi di base.
Richiami di Java Multithreading. Threads (subclassing) public class A { public void a_method { C t = new C(); //C t = new C(String name); t.start(); …
Sezione: Costruttori Costruttori. Definizione dei costruttori Se per una classe A non scrivo nessun costruttore, il sistema automaticamente crea il costruttore.
prompt> java SumAverage
J0 1 Marco Ronchetti - Java Networking TCP.
1 struct Pila { private: int size; int defaultGrowthSize; int marker; int * contenuto; void cresci(int increment); public: Pila(int initialSize) ; Pila();
Costruzione di Interfacce Lezione 10 Dal Java al C++ parte 1
Fisica Computazionale I - 51 OPERAZIONI DI INPUT/OUTPUT Le operazioni di input/output sono estremamente complesse perche' implicano una sostanziale interazione.
Corso di Informatica (Programmazione)
1 Ultima Lezione del Corso di Fondamenti di Informatica 1 a.a – 06 Ma 29-Nov-2005.
1. Conoscere luso delle collezioni in Java Comprendere le principali caratteristiche nelle varie classi di Collection disponibili Saper individuare quali.
JAVA C import java.util.*; #include <stdio.h>
1 Esercitazione sui segnali Problema: creare un programma analizzatore di file testuali che prenda come argomenti il nome di un file e una sequenza di.
Programming with JXTA Hello World Peer discovery Peer Group discovery Creating Peer group Joining a Peer Group.
Modello dati LISTA LISTA: LISTA: sequenza finita di 0 o più elementi LISTA di tipo T: lista in cui tutti gli elementi sono dello stesso tipo T. es. lista.
1 Implementazione di Linguaggi 2 PARTE 6 Implementazione di Linguaggi 2 PARTE 6 Massimo Ancona DISI Università di Genova Testo: A.V. Aho, R. Sethi, J.D.Ullman.
CAPITOLO 4 LINGUAGGIO JAVA: COSTRUTTI DI BASE. ALFABETO Java adotta la codifica standard Unicode della società Unicode, Inc. (ftp://ftp.unicode.org) definito.
Sottoprogrammi e Unità di Compilazione Nicola Fanizzi Laboratorio - Corso di Programmazione (B) C.d.L. in Informatica DIB - Università degli Studi di Bari.
Packages. Package: insieme di classi e interfacce in relazione Per formare un package basta inserire la direttiva come prima istruzione nel file sorgente.
Streams e Input/output
Gestione File System e I/O in Windows 2000 Implementazione del File System FAT-12, FAT-16, FAT-32 NTFS API relative al File System Gestione dei dispositivi.
Programmazione distribuita in Java
FILE TESTO INPUT PROGRAMMA + DATI OUTPUT FILE DATI PROGRAMMA OUTPUT
Concurrency: introduction1 ©Magee/Kramer Semantica operazionale di FSP Consideriamo i costrutti FSP e diamo la loro traduzione in Reti SA.
Java base VI: Gestione I/O. Argomenti Introdurre le API per linput e output in Java.
Sequence. CREARE UNA SEQUENCE CREATE SEQUENCE nome [INCREMENT BY n] [START WITH n] [MAXVALUE n | NOMAXVALUE] [MINVALUE n | NOMINVALUE] [CYCLE | NOCYCLE]
Lezione n° 05 Istituto Statale di Istruzione Superiore F. Enriques Corso JAVA.
Un esempio: Registrazione e lettura di dati in un file
Fondamenti di Informatica Corsi di Laurea in Ingegneria Gestionale Canale AL ESERCITAZIONE 4 ARGOMENTI: STRINGHE DI CARATTERI.
JavaScript Lezione 5 Tipizzazione ed operazioni tra tipi diversi Istruzioni di input.
OUTPUT FORMATTATO La funzione printf consente di effettuare la stampa a video formattata. Sintassi: printf ( stringa_formato, arg0, arg1, … ); La stringa.
Moduli o Form I Moduli permettono all'utente di immettere informazioni...
Fondamenti di Informatica Corsi di Laurea in Ingegneria Gestionale Canale AL ESERCITAZIONE 6 ARGOMENTI: LAVORARE CON CLASSI METODI DELLISTANZA, COSTRUTTORI.
1 Lucidi delle esercitazioni di Sistemi di Elaborazione in Rete Università degli Studi della Calabria Corso di Laurea in Ingegneria Informatica A.A. 2003/2004.
Ese 2 (del 31 Marzo 2004). Mostrare l'evoluzione dello stato (ambiente di classi, heap, pila, System.out) durante la valutazione delle seguenti dichiarazioni.
Multiset. Progettare (specifica con identificazione delle eventuali astrazioni necessarie, incluse eccezioni, e implementazione) del tipo di dato Multiset,
Soluzioni 1.Struttura base soluzione 2.Lettura dei tasti 3.Identificazione dei tasti 4.Accensione dei LED 5.Rotazione dei LED 6.Rotazione dei tasti fino.
1 Simulated multiple inheritance Sandro Pedrazzini Approfondimento Simulated multiple inheritance in Java.
2000 Prentice Hall, Inc. All rights reserved. I file Apertura e chiusura I file ad accesso sequenziale I file ad accesso casuale Apre un file già esistente.
Corso JAVA Lezione n° 12 Istituto Statale di Istruzione Superiore “F. Enriques”
Collection & Generics in Java
Stack Già visto l’altra volta senza gestione eccezioni, le prime tre slide servono solo come ripasso, dalla quarta argomento nuovo class Stack { int data[];
JDBC Java DataBase Connectivity SISTEMI ITIS B. CASTELLI Anno Scolastico
Ingresso e uscita in Java F. Bombi 10 ottobre 2002.
Argomenti della lezione
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ò.
1 Input / Output Spesso un programma deve acquisire dati da una sorgente esterna o inviare informazioni a una destinazione esterna. L’informazione puo’
I FILES AD ACCESSO SEQUENZIALE
Eccezioni – Precisazioni e approfondimenti
Transcript della presentazione:

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: Introduction

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: Introduction

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 Scrittura Apri lo stream while (ci sono ancora dati) leggi dato chiudi lo stream scrivi dato 1: Introduction

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: Introduction

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: Introduction

Stream di caratteri/2 Classi grigie: leggono/scrivono e basta Classi bianche: compiono anche qualche tipo di elaborazione 1: Introduction

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: Introduction

Stream di byte/2 Classi grigie: leggono/scrivono e basta Classi bianche: compiono anche qualche tipo di elaborazione 1: Introduction

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: 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: Introduction

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: Introduction

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: Introduction

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: Introduction

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: Introduction

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!!) Costruttori: 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: Introduction

DataInputStream/ DataOutputStream Forniscono metodi per leggere dati di formato complesso (byte, int, stringhe ecc.) da un InputStream Costruttori: 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: Introduction

InputStreamReader/ InputStreamWriter Sottoclassi di Reader/Writer Creano un ponte tra stream a byte e a carattere Costruttori: 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: Introduction

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: Introduction

BufferedReader/ BufferedWriter Realizzano buffering per rendere più efficienti le operazioni di I/O su stream di caratteri Costruttori: 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: Introduction

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: Introduction

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: Introduction

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) Costruttori: public FileInputStream(File file) throws FileNotFoundException public FileInputStream(String name) throws FileNotFoundException public FileOutputStream(File file) throws FileNotFoundException public FileOutputStream(String name) throws FileNotFoundException public FileOutputStream(String name, boolean append) throws FileNotFoundException 1: Introduction

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) Costruttori: 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: Introduction

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: Introduction

La classe FILE Rappresentazione astratta di file e directory Metodi per manipolare file e directory (creare, distruggere ecc.) Non contiene metodi per leggere/scrivere Costruttori: 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: Introduction

La classe FILE/2 Campi più importanti: Metodi 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: Introduction

Esercizio Scrivere una classe Java con i seguenti metodi: public boolean creaDir(String nomeDir): crea (nella directory corrente) una sottodirectory avente per nome il contenuto di nomeDir. Restituisce false in caso di fallimento 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 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: Introduction