Originariamente inviato da desa
Parto dalla fine (la questione FileWriter)...
Non conosco la tua applicazione completa, nè so di preciso gli utilizzi che intendi farne... ma secondo me la soluzione migliore è che sia il metodo chiamante (che non hai postato) a creare un FileWriter e che i tuoi metodi ricevano un parametro di questo tipo, piuttosto che un oggetto File.
In questi termini, io scriverei l'algoritmo così:

codice:
public void scriviNelFile(FileWriter fw, BinaryNode nodo, int livello)
{
  try
  {
    if (livello == 0)
    {
      fw.write("(nodo, livello)");
    }

    fw.write("(" + nodo.getDato() + ", " + livello + ")");
  }
  catch (IOException exception)
  {
    System.out.println("Errore scrittura sul file! (" + exception.getMessage() + ")");
  }
}

public void scriviLivelloNodi(FileWriter fw)
{
  scriviLivelloNodi(fw, root, 0);
}

public void scriviLivelloNodi(FileWriter fw, BinaryNode nodo, int livello)
{
  if (nodo == null)
  {
    return;
  }
  else
  {
    scriviNelFile(fw, nodo, livello);
    
    scriviLivelloNodi(fw, nodo.getLeftChild(), livello + 1);
    scriviLivelloNodi(fw, nodo.getRightChild(), livello + 1);
  }
}
Ok! come chiamata del metodo nel mio main ho: scriviLivelloNodi(new File("livello.txt"));