Vengono di seguito descritte le modifiche da fare alle classi:
Shell, FileDescriptor e FileSystem implementate la scorsa settimana.
- Gestire le eccezioni -
Nella classe FileSystem i metodi che possono fallire devono sollevare eccezioni, ad es.:
throw new FileDoesNotExistException(...)
Occorre quindi definire delle nuove eccezioni (tante quante i diversi tipi di
errori possibili) e sollevarle anziché utilizzare i valori di ritorno
per segnalare errore (di tipo boolean ad es. in create) come nella versione precedente.
Quando i metodi che possono sollevare eccezioni vengono invocati nel main,
ad es. s.create("pippo","txt","abracadabra"),
bisogna gestire la possibilità che sia sollevata un'eccezione con il
costrutto try-catch:
try{
s.create(...)
}
catch(...)
{
System.out.println("errore...");
}
Nel caso di metodi che possono sollevare eccezioni di tipo
diverso, utilizzare più clausole catch.
- Gestione memoria libera -
Nella classe FileSystem i metodi che possono fallire devono sollevare eccezioni, ad es.:
Nella versione precedente non c'è nessun controllo su quanto
spazio occupano i file.
Nella nuova versione deve essere possibile tenere sotto
controllo la memoria occupata dai file:
- La classe FileSystem deve contenere una variabile space che rappresenta
lo spazio disponibile in memoria (da inizializzare ad un numero di byte a piacere).
- il costruttore della classe prende come argomento lo spazio iniziale libero
- i metodi della classe devono mantenere la seguente condizione:
la somma della lunghezza dei file nella directory e della variabile space deve
essere uguale alla dimensione del disco. Ad esempio, quando viene creato il seguente file:
nome: pippo
estensione: txt
contenuto: abracadabra
il cui contenuto è lungo 11 caratteri (quindi 11 byte), al momento della creazione
dovrà essere decrementato di conseguenza:
space = space - 11;
Al contrario, quando un file viene cancellato, la memoria deve essere liberata (quindi bisogna
incrementare la variabile space...).
- definire un'eccezione per il caso in cui sia finito lo spazio. Modificare di conseguenza il
metodo create
- Mantenimento dell'ordine lessicografico degli file -
Nella classe FileSystem, quando un nuovo file viene inserito o
quando un file è rinominato, deve essere mantenuto l'ordine
degli elementi.
Ad esempio, se abbiamo la seguente directory:
paperino.doc | pippo.txt |
topolino.gif | null |
null |
alla creazione del file con nome "pluto.fla", la directory diventa:
paperino.doc | pippo.txt |
pluto.fla | topolino.gif |
null |
|