Soluzione 7.4

La classe StudentContainer (piu` sotto la classe StudentContainerTester).
import java.io.*;

import java.util.Scanner;
import java.util.NoSuchElementException;

public class StudentContainer extends SortedContainer
{   public StudentContainer()
    {   super();
    }
   
    public StudentContainer(String filename) throws IOException
    {   this();
        Scanner in = new Scanner(new FileReader(filename));
        int linecount = 0;
        while (in.hasNextLine())
        {   linecount++;
            String line = in.nextLine();
            Scanner linescan = new Scanner(line).useDelimiter(":");
            try
            {   String nome = linescan.next();
                int matricola = Integer.parseInt(linescan.next());
                add(nome, matricola);
            }
            catch (NoSuchElementException e)
            {   System.out.println("riga " + linecount + " errata: " + line);
            }
            catch (NumberFormatException e)
            {   System.out.println("riga " + linecount + " errata: " + line);
            }
        }
        in.close();
    }

    /*
        Inserisce il nuovo oggetto compObj di tipo Student nel contenitore. 
        Questo metodo sovrascrive il metodo omonimo di SortedContainer. Se  
        l'oggetto compObj non e` di tipo Student il metodo deve lanciare
        IllegalArgumentException. Per il resto il comportamento del metodo e` 
        identico a quello del metodo omonimo di SortedContainer
    */
    public void add(Comparable compObj)
    {   if (!(compObj instanceof Student))
            throw new IllegalArgumentException();
        super.add(compObj);
    }

    /*
        Crea un nuovo oggetto Student con il nome n e la matricola m, e 
        successivamente lo inserisce nel contenitore con le stesse modalita`
        del metodo add(Comparable compObj)
    */
    public void add(String n, int m)
    {   Student s = new Student(n,m);
        this.add(s);
    }

    /*
        ATTENZIONE: i metodi pubblici isEmpty(), makeEmpty(), size(), 
        removeMax() sono ereditati dalla superclasse SortedContainer
    */
}
La classe StudentContainerTester. Le righe di codice in questa classe sono pochissime, perche` l'operazione di lettura di dati da file e` stata incapsulata nel costruttore della classe StudentContainer
import java.io.*;

import java.util.Scanner;
import java.util.NoSuchElementException;

public class StudentContainerTester
{
    public static void main(String[] args) throws IOException
    {   if (args.length != 2)
        {
         System.out.println("uso: $java StudentContainerTester inFile outFile");
         return;
        }

        StudentContainer archivio = new StudentContainer(args[0]);

        PrintWriter writer = new PrintWriter(args[1]);
        while (!archivio.isEmpty())
            writer.println(archivio.removeMax());
        writer.close();
    }
}