sareste così gentili da dare un occhiata a questo piccolo programma e dirmi dove erro?

la traccia è "scrivere un programma sulla gestione dei corsi universitari. si stampino tutti i corsi e dato un docente stampare tutti i corsi da lui tenuti"


codice:
CLASSE CORSO

import java.io.PrintStream;

import java.util.Scanner;


public class Corso {
	private String codFiscale;
	private String codCorso;
	private String nomeCorso;
	private String corsoLaurea;
	private String descrizione;

	
	public Corso(String aCodFiscale, String aCodCorso, String aNomeCorso, String aCorsoLaurea, String aDescrizione){
		codFiscale=aCodFiscale;
		codCorso=aCodCorso;
		nomeCorso=aNomeCorso;
		corsoLaurea=aCorsoLaurea;
		descrizione=aDescrizione;
		
	}
	
	public String getCodFiscale (){
		return codFiscale;
	}

	public String getCodCorso (){
		return codCorso;
	}
	
	public String getNomeCorso (){
		return nomeCorso;
	}
	
	public String getCorsoLaurea (){
		return corsoLaurea;
	}
	
	public String getDescrizione (){
		return descrizione;
	}
	
	public String toString(){
		return "Cod fiscale: " + codFiscale + "\n" +
		"Cod corso: " + codCorso + "\n" +
		"Nome corso: " + nomeCorso + "\n" +
		"Corso laurea: " + corsoLaurea + "\n" + 
		"Descrizione: " + descrizione;
	}
	
	public void print (PrintStream ps){
		ps.println(codFiscale);
		ps.println(codCorso);
		ps.println(nomeCorso);
		ps.println(corsoLaurea);
		ps.println(descrizione);
	}
	
	public static Corso read (Scanner s2){
		if(s2.hasNext())
			return null;
		String codFiscale=s2.nextLine();
		
		if(s2.hasNext())
			return null;
		String codCorso=s2.nextLine();
		
		if(s2.hasNext())
			return null;
		String nomeCorso=s2.nextLine();
		
		if(s2.hasNext())
			return null;
		String corsoLaurea=s2.nextLine();
		
		if(s2.hasNext())
			return null;
		String descrizione=s2.nextLine();
		
		Corso c=new Corso(codFiscale, codCorso, nomeCorso, corsoLaurea, descrizione);
		
		return c;
	}


codice:
CLASSE DOCENTE
import java.io.PrintStream;

import java.util.Scanner;


public class Docente {
	private String codFiscale;
	private String nome;
	private String cognome;
	private int dataNascita;
	private String fascia;
	private String corsoLaurea;
	
	
	public Docente (String aCodFiscale, String aNome, String aCognome, int aDataNascita, String aFascia, String aCorsoLaurea){
	 codFiscale=aCodFiscale;
	 nome=aNome;
	 cognome=aCognome;
	 dataNascita=aDataNascita;
	 fascia=aFascia;
	 corsoLaurea=aCorsoLaurea;
		
	}

	public String getCodFiscale(){
		return codFiscale;
	}
	
	public String getNome(){
		return nome;
	}
	
	public String getCognome(){
		return cognome;
	}
	
	
	public int getDataNascita(){
		return  dataNascita;
	}
	
	public String getFascia(){
		return fascia;
	}
	
	public String getCorsoLaurea(){
		return corsoLaurea;
	}
	
	public String toString(){
		return "Cod fiscale: " + codFiscale + "\n" + 
		"Nome: " + nome + "\n" + "Cognome: " + cognome + "\n" +
		"Data nascita: " +dataNascita + "\n" +
		"Fascia: " + fascia + "\n"
       +"Corso laurea: " + corsoLaurea;
		}
	
	public void print (PrintStream ps){
		ps.println(codFiscale);
		ps.println(nome);
		ps.println(cognome);
		ps.println(dataNascita);
		ps.println(fascia);
		ps.println(corsoLaurea);
	}
	
	public static Docente read (Scanner s){
		if(!s.hasNext())
			return null;
		String codFiscale=s.nextLine();
		
		if(!s.hasNext())
			return null;
		String nome=s.nextLine();
		
		if(!s.hasNext())
			return null;
		String cognome=s.nextLine();
		
		if(!s.hasNextInt())
			return null;
		int dataNascita=s.nextInt();
		
		if(!s.hasNext())
			return null;
		String fascia=s.nextLine();
		
		if(!s.hasNext())
			return null;
		String corsoLaurea=s.nextLine();
		
		
		Docente i=new Docente (codFiscale, nome, cognome, dataNascita, fascia, corsoLaurea);
	
		
		return i;
	}
	
	
}
codice:
GESTORE SEGRETERIA

import java.util.ArrayList;
import java.util.Scanner;


public class Segreteria {
private ArrayList <Docente> docenti;
private ArrayList <Corso> corsi;

public Segreteria(Scanner s, Scanner s2){
	docenti=new ArrayList <Docente>();
	corsi=new ArrayList <Corso> ();
	while(s.hasNext()){
		Docente d=Docente.read(s);
		docenti.add(d);
	}
	while(s2.hasNext()){
		Corso c= Corso.read(s2);
		corsi.add(c);
	}
		
}
	
public void stampaArchivio(){
	for(Docente d: docenti)
		System.out.println(d);
	for(Corso c: corsi)
		System.out.println(c);
}
	
public void datoDocenteGetCorso(String codFiscale){
	for(Docente d: docenti){
		if(codFiscale.equalsIgnoreCase(d.getCodFiscale()))
			for(Corso c: corsi)
				if(d.getCodFiscale().equalsIgnoreCase(c.getCodFiscale()))
					System.out.println(c);
				
}}
	
}
codice:
TESTER

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.util.Scanner;


public class Tester {

	
	public static void main(String[] args) throws FileNotFoundException {
	String percorso="Desktop//Programmazione//DocenteFile.txt";
	File f=new File (percorso);
	FileReader fr=new FileReader(f);
	Scanner s=new Scanner (fr);
	
	
	String percorso2="Desktop//Programmazione//CorsoFile.txt";
	File f2=new File (percorso2);
	FileReader fr2=new FileReader(f2);
	Scanner s2=new Scanner (fr2);
	
	Segreteria segreteria=new Segreteria (s, s2);
	segreteria.stampaArchivio();
	//segreteria.datoDocenteGetCorso("AG290889"); 
		
		

	}

}

mi dà un errore di out of memory heap space...
il punto è che non è possibile in quanto i file da cui leggo sono piccolissimi (giusto qualche riga per vedere se funziona il prog) e poi ho provato anche da un altro computer e nemmeno lì funziona. vi prego potete aiutarmi?