La matrice è inizializzata con spazi, e dove c'è spazio (quindi una cella in cui non ho scritto) faccio scrivere '£', poi vado a capo.

codice:
//Salvataggio su file.txt
public void scrivi()
	{
		try
		{	
			FileWriter out = new FileWriter (nomefile);
			for(int i = 0; i < r; i++){
				for(int j = 0; j < c; j++){
					if(o[i][j] == " "){
						out.write("£" + "\n");
						}
						
					else{
						out.write(o[i][j].toString());
						out.write("\n");
					}
				}
			}
			out.close();
		}
		catch (IOException ex){
			ex.printStackTrace();
		}
		System.out.println("Salvataggio eseguito correttamente");
		
	}
Ora carico con un buff.readLine(), che leggendo riga per riga, mi riepie una cella alla volta (almeno credo), poi copio il contenuto di questa matrice o[][] in quella dichiarata nel TableModel.

codice:
//Caricamento da file
public Object[][] leggi()
	{
		try
		{	int i = 0;
			int j = 0;
			in = new FileReader(nomefile);
			buff = new BufferedReader(in);
			while(buff.readLine() != null){
				if(buff.readLine() == "\n"){
					j++;
					if(j == c){
						j = 0;
						i++;
						if(i == r)
							return o;
					}
				}
				o[i][j] = buff.readLine();
			}
				
			in.close();
		}
		
		catch (IOException ex){
			ex.printStackTrace();
		}
		System.out.println("Caricamento eseguito correttamente");
		return o;
		
	}