Esercizio 5 - File System con Liste

Scopo dell'esercizio è fornire un'implementazione alternativa della classe "FileSystem" vista precedentemente, utilizzando una lista concatenata, invece che un array, di oggetti File Descriptor.

  • Classe FileDescriptor - In linea di principio questa classe non deve essere modificata.

  • Classe FileSystem - La classe FileSystem implementa il FileSystem vero e proprio. L'interfaccia rimane per la maggior parte identica a prima. L'implementazione, però cambia quasi del tutto. Di seguito vengono descritti i principali cambiamenti.
    1. Definire la classe privata interna FileElem nel modo seguente:

      private class FileElem
      {
      public FileDescriptor file;
      public FileElem next;
      }

    2. La variabile di istanza principale si chiamerà firstFile e sarà un oggetto della classe FileElem. Verrà inizializzata a null nel costruttore e di seguito punterà sempre al primo elemento della lista di file.
    3. Quando un nuovo file viene inserito, deve essere mantenuto l'ordine lessicografico degli elementi.
      Ad esempio, se abbiamo la seguente lista di file:

      alla creazione del file con nome "pluto.txt", la directory diventa:
    4. Oltre al costruttore citato, la classe FileSystem devrà contenere i metodi pubblici visti nella precedente implementazione (dir, create, delete, rename, search). Questi metodi, nel caso producano errori, dovranno restituire un'eccezione. In particolare, il metodo search dovrà restituire un oggetto FileDescriptor:

      - public FileDescriptor search(String nome, String estensione) throws FileDoesNotEsist

    5. Possono essere implementati tutti i metodi privati (interni) voluti per percorrere la lista. Questi metodi possono essere messi a supporto dei metodi pubblici utilizzando, in contesto locale, oggetti della classe FileElem. In questo modo sarà possibile agire sui singoli elementi della lista senza spostare il riferimento principale (oggetto firstFile).

  • Classe Shell - In linea di principio la classe "Shell" non dovrebbe essere modificata relativamente alle operazioni viste (stampa lista file, help, quit, crea file, cancella file). Probabilmente, l'unica modifica dovrà riguardare la chiamata del metodo search nella classe FileSystem, che ora restituisce un oggetto FileDescriptor.