Il metodo listRoots della classe File ti restituisce un array contenente la (o le, se ne esiste piu' di una) directory radice.
Da li discendi ricorsivamente in ogni sotto-directory.