E questo è poi il main

codice:
    private void bottoneAggiungiActionPerformed(java.awt.event.ActionEvent evt) {                                                
        // TODO add your handling code here:
        
        e.matricola = matricola.getText();
        e.addStudente(cognome.getText(), nome.getText(), appello.getSelectedItem(), voto.getSelectedItem());        
        if (d.exists() != true) {
            d.newDoc();
            try {
                d.scrivi(e, i);
            } catch (IOException ex) {
                Logger.getLogger(mainFrame.class.getName()).log(Level.SEVERE, null, ex);
            }
        } else {            
                
            try {          
                d.scrivi(e, i);
            } catch (IOException ex) {
                Logger.getLogger(mainFrame.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
       i++;
       matricola.setText("");
       cognome.setText("");
       nome.setText("");
       appello.setSelectedIndex(0);
       voto.setSelectedIndex(0);
    }
Questo non mi pare proprio il main...più che altro sono le azioni che vengono fatte quando clicchi sul bottone.

Hai inizializzato ElencoSutudenti nei passi precedenti?
Perché l'errore è qui
codice:
public void scrivi(ElencoStudenti e, int i) throws IOException{      
        FileWriter f = new FileWriter(doc, true);
    ==>    f.write((String)e.matricola+" - "+e.getStudente(i).getCognome()+" - "+e.getStudente(i).getNome()+" - "+e.getStudente(i).getAppello()+" - "+e.getStudente(i).getVoto()+"\r\n");  
        f.close();
    }