Ciao,
ho capito che hai qualche problema sul metodo ricorsio.
Non sono molto entrato nel tuo caso particolare ma ho scritto un esempio di ricorsione per vedere la lista di tutti i tuoi files e dirctorys(e sottodirectory) così magari lo puoi utilizzare come spunto per farci la tua logica.
(Mi dispiace se la formattazione dell'output non è molto chiara ma non avevo molto tempo )

codice:
package test;

import java.io.File;

public class CercaFileInModoRicorsivo {

	static private File root = new File("c:/nn");
	static private File[] figli = null;

	public static void scanRot(File padre, int livello) {
		if (padre.isDirectory()){
			System.out.println("("+padre.getParent()+")  DIR --> Livello: " + livello++ + "  : " + padre.getName());
			 figli = padre.listFiles();
			 for(File figlio : figli)
				 scanRot(figlio, livello);
		} else System.out.println("("+padre.getParent()+")  File --> Livello: " + livello++ + "  : " + padre.getName());
	}

	public static void main(String[] args) {
		scanRot(root, 0);
	}

}
cmq controlli se è una dir
se è dir ti fai dare la lista dei figli.
per ogni figlio vedi
se è dir --> ripassi il File (che è una dir) al metodo
altrimenti (cioè è un File non dir) lo stampi (fine).

per il test la mia root non parte da c: ma te puoi farlo partire da dove vuoi.

spero di esserti stato d'aiuto.
nh