LETTURA E SCRITTURA DI FILE

Documenti analoghi
A. Ferrari Java: Stream e File

Lettura e scrittura - Stream

A. Ferrari Stream e File

Creazione, eliminazione, lettura e scrittura di file di testo

Creazione, eliminazione, lettura e scrittura di file di testo

Input/Output in Java

Programmazione ad Oggetti

Note ed esercizi aggiuntivi

Le basi del linguaggio Java

Programmazione in Java e gestione della grafica. Lezione 24

INPUT OUTPUT

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

Variabili e Metodi di classe Interfacce e Package File in Java

Corso sul linguaggio Java

Lettura e scrittura - Stream

Eccezioni Precisazioni e approfondimenti

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

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

Fondamenti di Informatica

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

Sommario. I Uso degli oggetti 39

Quando usare file di dati

Unità A1 I file testo

Informatica. Prof. A. Longheu. Input e Output

Programmazione lato client. JavaScript. Applicazioni di Rete M. Ribaudo - DISI. JavaScript

Corso sul linguaggio Java

JavaScript JavaScript Programmazione lato client JScript JavaScript ECMAScript

ESERCIZIO 1 (FILE DI TESTO)

Input/output da file I/O ANSI e I/O UNIX FLUSSI E FILE FLUSSI FLUSSI di TESTO FLUSSI BINARI FILE

Corso sul linguaggio Java

File binari e file di testo

Le operazioni di Input e Output

Note ed esercizi aggiuntivi

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

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

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

FONDAMENTI DI INFORMATICA C Linguaggio Java: Eccezioni

Input/Output. Console e File.

IL CONCETTO DI FILE. È illecito operare oltre la fine del file.

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

Inizializzare oggetti

Note ed esercizi aggiuntivi

Programmazione I - corso B a.a prof. Viviana Bono

Capitolo 13: Gestione delle eccezioni. Capitolo 13. Gestione delle eccezioni Apogeo srl Horstmann-Concetti di informatica e fondamenti di Java 2

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

Lezione 16 programmazione in Java

Introduzione a Java. Riferimenti

Eccezioni. Comportamento di default (esempio) Propagazione delle eccezioni

Università degli studi di Roma Tor Vergata Ingegneria Medica Informatica I Programma del Corso

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

RETI DI CALCOLATORI Linguaggio Java: Eccezioni

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:

Informatica e Laboratorio di Programmazione C++ stream Alberto Ferrari. Alberto Ferrari Informatica e Laboratorio di Programmazione

Cominciamo ad analizzare la rappresentazione delle informazioni... di Cassino. C. De Stefano Corso di Fondamenti di Informatica Università degli Studi

Sommario. Manipolazione sequenziale di file in C Funzioni di base per I/O di file

Il linguaggio C. Breve panoramica su stdio.h

9 - Array. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo

Caratteri e stringhe

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

Gestione delle eccezioni

Le classi FileInputStream e RandomAccessFile. Semplici Algoritmi di Ordinamento

Raccolta di tutorial Python #1: basi e Tkinter dal sito francescomilanese.com SOMMARIO

Università di Roma Tor Vergata Corso di Laurea triennale in Informatica Sistemi operativi e reti A.A Pietro Frasca.

Fondamenti di Informatica C Esercitazioni di Laboratorio / 4 Outline

GESTIONE DEI FILE IN C. Docente: Giorgio Giacinto AA 2008/2009

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

Rappresentazione degli algoritmi

Operazioni base di Input e Output

Programmazione A.A Costrutti di base. ( Lezione XII, parte I ) Gestione dell input. Prof. Giovanni Gallo Dr.

Riferimenti ad oggetti: Fondamenti di Informatica L-B Esercitazione n 4 Java: I/O, Costruttori e altro. Riferimenti ad oggetti: (Esempio)

STRUTTURE DINAMICHE. (slide: A. Baratè L.A. Ludovico) Programmazione per la Musica Adriano Baratè

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

La gestione dell input/output da tastiera La gestione dell input/output da file La gestione delle eccezioni

Gestione dei file in PHP

Gestione dei File. Credits Prof. Campi

Programmazione Orientata agli Oggetti in Linguaggio Java

Esercitazione n 2. Obiettivi

Programmazione distribuita in Java. Socket & Client-Server

Programmazione in Java

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

Prova d Esame Compito A

Programmazione. Cognome... Nome... Matricola... Prova scritta del 22 settembre Negli esercizi proposti si utilizzano le seguenti classi:

Preparazione allo Scritto di Programmazione

Gestione dell I/O su File

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

INTRODUZIONE ALLA PROGRAMMAZIONE AD ALTO LIVELLO IL LINGUAGGIO JAVA. Struttura di un programma Java

Corso sul linguaggio Java

Cosa serve per cominciare?

20 - Input/Output su File

Corso di Laboratorio di Sistemi Operativi

Caratteri e stringhe

OCA JAVA 7 SE PROGRAMMER I DOCENTE: DOTT. FAUSTO DELL ANNO

Descrittori di formato

L utility Unix awk [Aho-Weinberger-Kernighan]

10.4. La classe File e gli attributi di directory e file

Le command line di Java. Esercitazioni di Sistemi Operativi III Lezione n. 2

Transcript:

LETTURA E SCRITTURA DI FILE (slide: A. Baratè L.A. Ludovico) Programmazione per la Musica Adriano Baratè

LA CLASSE FILE La classe File fornisce una rappresentazione astratta del percorso (pathname) di una cartella (directory) o di un documento (file) Sistemi operativi e interfacce utilizzano stringhe dipendenti dal sistema in uso. Questa classe mette a disposizione un astrazione comunque gerarchica ma indipendente dal sistema Esempio: nei percorsi si usa il separatore / in Unix, ma Windows ammette anche \

PERCORSI ASSOLUTI E RELATIVI Un percorso può essere assoluto o relativo. Quando è assoluto, contiene intrinsecamente tutte le informazioni per localizzare un file. Se invece è relativo, deve essere interpretato sulla base di altre informazioni Di default, le classi nel package java.io risolvono i percorsi relativi rispetto alla directory corrente. Tipicamente, si tratta della cartella in cui si invoca la Java Virtual Machine Gli attributi statici File.pathSeparator e File.separator sono costanti che indicano i separatori usati nel sistema in uso (Es. ":" e "/")

LA CLASSE FILE Costruttori: File(String pathname), File(URI uri), boolean canexecute() boolean canread() boolean canwrite() testano i permessi da parte dell applicazione boolean delete() cancella il file o la cartella

VERIFICHE SUI FILE Visto che la stessa classe può essere usata per effettuare operazioni su file e su directory, spesso occorre controllare il tipo di oggetto su cui si sta operando Il modo più semplice è invocare il metodo boolean isfile(), ed esiste anche boolean isdirectory() In alternativa, il metodo boolean exists() verifica se il file o la directory esistono boolean ishidden() verifica se si tratta di file nascosto

LA CLASSE FILEREADER FileReader è pensata per leggere del testo carattere per carattere Costruttori: FileReader(File file), FileReader(String filename), Metodi: int read(buffer), int read(buffer, offset, length) Esempio: FileReader fr = new FileReader("a.txt"); char[] cbuf = new char[30]; fr.read(cbuf, 2, 3); fr.read(cbuf, 10, 7); System.out.println(cbuf); a.txt: contenuto1 contenuto2 contenuto3 Output: con tenuto1

ALTRI METODI DELLA CLASSE FILE La classe File mette a disposizione un gran numero di metodi per gestire documenti e cartelle. Ad esempio: String getname() restituisce il nome del file o directory String getparent() restituisce il nome della cartella padre String getpath() converte il nome astratto in un percorso a stringa long lastmodified() restituisce l istante di ultima modifica long length() dà la dimensione del file String[] list() dà l elenco di file e cartelle contenute nella cartella denotata dal path corrente (con numerose varianti )

LA CLASSE BUFFEREDREADER Un BufferedReader legge testo da un flusso di caratteri in ingresso, in modo da rendere efficiente la lettura sequenziale di caratteri e righe Sarebbe possibile specificare anche la dimensione del buffer, ma quella di default è sufficientemente capiente per la maggior parte delle applicazioni Tra i principali metodi: int read() legge un singolo carattere, String readline() legge una riga di testo e long skip(long n) salta nella lettura un certo numero di caratteri

ESEMPIO: LETTURA RIGA PER RIGA File file = new File("miofile.txt"); if (file.isfile()) { FileReader filereader = new FileReader(file); BufferedReader bufreader = new BufferedReader(fileReader); try { String line; // lettura del file di testo riga per riga while ((line = bufreader.readline())!= null) { ; // operazioni su line } } finally { // rilascio delle risorse bufreader.close(); filereader.close(); } }

TRY-WITH-RESOURCES In generale tutte le risorse allocate con i metodi di lettura/scrittura di file devono essere rilasciate invocando il metodo close() Nell esempio precedente, vengono gestite correttamente con l utilizzo di try finally le eccezioni sulla lettura del file, ma potrebbe succedere che venga generato un errore proprio nell utilizzo del metodo close() e questa eccezione non viene gestita Da Java 7 è preferibile usare il costrutto try-with-resources, che automaticamente chiude il flusso di input/output Anche in questo caso è possibile aggiungere le clausole catch e finally, però quando si giunge al blocco corrispondente lo stream è già stato chiuso

ESEMPIO: LETTURA RIGA PER RIGA (2) File file = new File("miofile.txt"); if (file.isfile()) { try ( FileReader filereader = new FileReader(file); BufferedReader bufreader = new BufferedReader(fileReader) ) { String line; // lettura del file di testo riga per riga while ((line = bufreader.readline())!= null) { ; // operazioni su line } } }

ESERCIZIO (EasyScore.java) Scrivere un software che interpreta una rappresentazione testuale di una partitura, in cui ogni riga corrisponde a uno strumento (monodico) e ogni gruppo di caratteri separato da virgole a una pulsazione di valore ritmico predefinito (ad esempio da un ottavo) Le altezze sono scritte in notazione anglosassone (ad es. C4 rappresenta il Do della quarta ottava, e Eb5 il Mi bemolle della quinta). Si considerino solo alterazioni singole (# e b) Le pause sono contrassegnate come note «degeneri» tramite la lettera R Le durate si ricavano dal numero di virgole che separano le stringhe: ogni stringa mancante tra virgole costituisce l allungamento della nota (o della pausa) precedente Ad esempio, l incipit di Fra Martino sarebbe: C4,D4,E4,C4,C4,D4,E4,C4,E4,F4,G4,,E4,F4,G4,,G4,,G4 R,,,,,,,,C4,D4,E4,C4,C4,D4,E4,C4,E4,F4,G4 Hint: stringa.split("char") restituisce un array di String separando la stringa principale per il carattere specificato (più precisamente il metodo accetta espressioni regolari)

SCRITTURA DI FILE Si può scrivere su file usando due classi: FileWriter e BufferedWriter FileWriter scrive immediatamente su disco BufferedWriter scrive solo a buffer pieno, ottimizzando l accesso al disco (in più offre il metodo newline() per andare a capo)

ESEMPIO DI SCRITTURA FILE try (FileWriter w = new FileWriter("pitches.txt"); BufferedWriter bw = new BufferedWriter(w)) { bw.write('a'); bw.write('4'); bw.newline(); bw.write("g4"); } catch (IOException ex) { }

ESERCIZIO (EasyScore.java) Modificare il software precedente per scrivere su file il contenuto della struttura dati score Ogni riga rappresenta uno strumento Utilizzare il metodo tostring() già esistente per le singole note Il contenuto del file deve risultare incolonnato sulle singole note, considerando 12 caratteri per ogni granulo (nel codice: l ottavo) Ad esempio, l incipit di Fra Martino sarebbe: C4 [1/8] D4 [1/8] E4 [1/8] C4 [1/8] C4 [1/8] D4 [1/8] E4 [1/8] C4 [1/8] E4 [1/8] F4 [1/8] G4 [2/8] E4 [1/8] F4 [1/8] G4 [2/8] Rest [8/8] C4 [1/8] D4 [1/8] E4 [1/8] C4 [1/8] C4 [1/8] D4 [1/8] E4 [1/8] C4 [1/8]