Free University of Bolzano/Bozen
Faculty of Computer Science - Bachelor in Applied Computer Science
Introduction to Programming - A.A. 2006/2007

Esercizio 9

File e gestione delle eccezioni


Esercizio 9A

Aggiungere alla classe Document dell'esercizio 6A un metodo read() definito static. Il metodo dovrebbe accettare un parametro br di tipo BufferedReader, leggere dati da br e infine creare e restituire un oggetto di tipo Document contenenti questi dati.
Piú precisamente, read() dovrebbe svolgere i seguenti passi:

  1. Legge una singola riga di testo da br e la assegna a una variabile di tipo String. Si intende che la riga letta contiene il nome dell'autore, il titolo del documento e il numero di copie vendute separati dal punto virgola (;), per esempio:

    Bruce Tate;Beyond Java;53

  2. Estrae i singoli campi dalla stringa usando il metodo split() disponibile nella classe String.
  3. Crea un nuovo oggetto di tipo Document usando le informazioni lette e restituisce l'oggetto.

Soluzione


Esercizio 9B

Implementare una classe DocumentClient che utilizzi la classe Document: dovrebbe leggere una serie di documenti da un file testuale, calcolare il numero medio di copie e scrivere su un file testuale tutti i documenti presenti con un numero di copie maggiore della media.
Piú precisamente, DocumentClient dovrebbe svolgere i seguenti passi:

  1. Legge da riga di commando i nomi dei file di input e di output. Il file di input, per semplicità, conterrà nella prima riga un numero intero numDocs che indica il numero di documenti. Questa prima riga sarrà seguita da numDocs righe ciascuna delle quali conterrà informazioni su un documento formattato come indicato nella parte A dell'esercizio.
  2. Legge dalla prima riga del file di input il numero numDocs e crea un array per accogliere numDocs oggetti di tipo Document.
  3. Usando il metodo read() legge dalle rimanenti righe del file di input gli oggetti Document che verranno assegnati all'array di cui sopra.
  4. Calcola il numero medio di copie dei documenti presenti nell'array.
  5. Scrive sul file di output tutti i documenti presenti con un numero di copie maggiore della media. Il file dovrebbe essere formattato come il file di ingresso: la prima riga conterrà il numero di documenti e le successive righe i dati dei documenti.
Un esempio di file di input è data.txt.

Soluzione


Esercizio 9C

Modificare DocumentClient in modo che gestisca le seguenti eccezioni:

L'applicazione dovrebbe terminare se capita una di queste eccezioni.

Soluzione


Esercizio 9D

Definire una classe DocumentFormatException che rappresenti eccezioni che possono capitare quando un Documento viene letto. Estendere il metodo read() della classe Document in modo che lanci questa eccezione nei seguenti due casi:

Inoltre, modificare l'applicazione DocumentClient in modo che raccolga DocumentFormatException. Nel caso che l'eccezione capiti l'applicazione dovrebbe:

  1. Stampare su schermo il messaggio associato all'eccezione e la riga del file di input che l'ha causata.
  2. Assegnare null alla corrente posizione nell'array di oggetti Document. Dopo, quando calcola la media e scrive il file di output, l'applicazione scarterà gli elementi uguali a null.
Un esempio di file di input con alcuni errori è data_errors.txt.

Soluzione