Esercizio 2

[L'esercizio deve essere risolto e consegnato entro il giorno 6/2/2004]

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.docpippo.txt topolino.gifnull null
    alla creazione del file con nome "pluto.fla", la directory diventa:
    paperino.docpippo.txt pluto.flatopolino.gif null