Java base VI: Gestione I/O. Argomenti Introdurre le API per linput e output in Java.

11
Java base VI: Java base VI: Gestione I/O Gestione I/O

Transcript of Java base VI: Gestione I/O. Argomenti Introdurre le API per linput e output in Java.

Page 1: Java base VI: Gestione I/O. Argomenti Introdurre le API per linput e output in Java.

Java base VI:Java base VI:Gestione I/OGestione I/O

Page 2: Java base VI: Gestione I/O. Argomenti Introdurre le API per linput e output in Java.

Argomenti

• Introdurre le API per l’input e output in Java

Page 3: Java base VI: Gestione I/O. Argomenti Introdurre le API per linput e output in Java.

Obiettivi

• Familiarizzare con le procedure di accesso ai file

Page 4: Java base VI: Gestione I/O. Argomenti Introdurre le API per linput e output in Java.

Input e Output in JavaInput e Output in Java

Gestito dal package java.iojava.io

classiinterfacce

eccezioni

Composto da classi per

Accedere ad informazioni relative ai Accedere ad informazioni relative ai file e alle directoryfile e alle directory

Leggere e scrivere Leggere e scrivere datidati

IMPORTATO ESPLICITAMENTE

Page 5: Java base VI: Gestione I/O. Argomenti Introdurre le API per linput e output in Java.

La classe FileLa classe FileLa classe fondamentale per accedere alle La classe fondamentale per accedere alle

informazioni relative ai file ed alle informazioni relative ai file ed alle directorydirectory

E’ importante tenere presenti i problemi di portabilità del codice:

File f = new File(“C:\prova.txt”);

File cartella = new File(“C:\cartella”);

File f = new File(“C:\”, “prova.txt”);

File f = new File(cartella,“prova.txt”);

Metodi principaliMetodi principali

Page 6: Java base VI: Gestione I/O. Argomenti Introdurre le API per linput e output in Java.

Accesso ai datiAccesso ai dati

Il meccanismo di lettura e scrittura dei dati è basato sul Il meccanismo di lettura e scrittura dei dati è basato sul concetto di concetto di streamstream

Sequenza ordinata di dati che hanno una sorgente (flussi di ingresso) o una destinazione (flussi di uscita)

Per gestire gli stream abbiamo classi che agiscono da "lettori" e "scrittori

ProgrammaProgrammaJavaJava

Dispositivo Dispositivo I/OI/O

ProgrammaProgrammaJavaJava

Dispositivo Dispositivo I/OI/O

INPUT STREAM

OUTPUT STREAM

stream di caratteri (16 bit)stream di caratteri (16 bit) stream di byte (8 bit)stream di byte (8 bit)

Page 7: Java base VI: Gestione I/O. Argomenti Introdurre le API per linput e output in Java.

Algoritmi standard di lettura/scritturaAlgoritmi standard di lettura/scrittura

1) Apertura dello stream di input

2) while “ci sono dati da leggere”:

Lettura dei dati in input

3) Chiusura dello stream1) Apertura dello stream di

2) while “ci sono dati da scrivere”:

Scrittura dei dati in

3) Chiusura dello stream

Algoritmo di letturaAlgoritmo di lettura

Algoritmo di scritturaAlgoritmo di scrittura

Page 8: Java base VI: Gestione I/O. Argomenti Introdurre le API per linput e output in Java.

Stream di CaratteriStream di CaratteriLe classi astratte Reader e Writer forniscono le API e una parziale

implementazione di stream di caratteri, rispettivamente, di input e output;

ReaderReaderInputStreamReader FileReaderFileReader

BufferedReaderBufferedReader

WriterWriterOutputStreamWriter FileWriterFileWriterBufferedWriterBufferedWriter

Lettura e scrittura tramite buffer

Riduce accessi Aumenta efficienza

Page 9: Java base VI: Gestione I/O. Argomenti Introdurre le API per linput e output in Java.

File inputFile = new File("input.txt");

File outputFile = new File("output.txt");

FileReader in = new FileReader(inputFile);

FileWriter out = new FileWriter(outputFile);

BufferedReader inb = new BufferedReader(in);

BufferedWriter outb = new BufferedWriter(out);

int c;

while ((c = inb.read()) != -1)

outb.write(c);

inb.close();

outb.close();

Istanzio gli oggetti

Scorro e scrivo

Chiudo gli stram

Page 10: Java base VI: Gestione I/O. Argomenti Introdurre le API per linput e output in Java.

Stream di byteStream di byte

Le classi astratte InputStream e OutputStream forniscono le API e una parziale implementazione di stream di byte di input e output

InputStreamInputStreamFileInputStream

OutputStreamOutputStreamFileoutputStream

ObjectInputStream

ObjectOutputStream

Permettono di serializzareserializzare un oggetto

codificarlo come stream di byte

Solo se oggetto implementaInterfaccia SERIALIZABLE

Page 11: Java base VI: Gestione I/O. Argomenti Introdurre le API per linput e output in Java.

FileOutputStream out = new FileOutputStream("temp.dat");

ObjectOutputStream s = new ObjectOutputStream(out);

s.writeObject("Oggi");

s.writeObject(new Date());

s.flush();

FileInputStream in = new FileInputStream("temp.dat");

ObjectInputStream i = new ObjectInputStream(in);

String today = (String)i.readObject();

Date date = (Date)i.readObject();

Scrive su file i due oggetti

Legge da file i due oggetti