Encuentra recursivamente todos los archivos de texto en el directorio

Estoy tratando de obtener los nombres de todos los archivos de texto en un directorio. Si el directorio tiene subdirectorios, también quiero obtener cualquier archivo de texto en ellos. No estoy seguro de cómo hacer que el proceso continúe para cualquier número de subdirectorios.

En este momento, el código a continuación solo obtiene todos los archivos de texto en el directorio actual y los subdirectorios en el directorio. Para cada subdirectorio encontrado, también encuentra cualquier archivo de texto y subdirectorios más profundos. El problema es que si esos subdirectorios más profundos tienen subdirectorios más profundos, entonces no estoy encontrando todos los archivos de texto. Este parece ser un problema que requiere recursión porque no sé qué tan profundo será esto.

Aquí está mi código hasta ahora:

File rootDirectory = new File(rootDir);
if (rootDirectory.isDirectory()) {
    System.out.println("Valid directory");

    File[] listOfFiles = rootDirectory.listFiles(); 
    for (int i = 0; i < listOfFiles.length; i++) {
        String iName = listOfFiles[i].getName();
        if (listOfFiles[i].isFile()) {
            if (iName.endsWith(".txt") || iName.endsWith(".TXT")) {
                System.out.println("File: "+iName);
            }
        }
        if (listOfFiles[i].isDirectory()) {
            System.out.println("Directory: "+iName);

            File[] subList = listOfFiles[i].listFiles();
            for (int j = 0; j < subList.length; j++) {
                String jName = subList[j].getName();
                if (subList[j].isFile()) {
                    if (jName.endsWith(".txt") || jName.endsWith(".TXT")) {
                        System.out.println("\tFile: "+jName);
                    }
                }
                if (subList[j].isDirectory()) {
                    System.out.println("\tDirectory: "+jName);
                }
            }
        }
    }
}
else System.out.println("Invalid directory");

Editar: Lo tengo funcionando, gracias Olaf Dietsche:

public void findFiles(File root, int depth) {
    File[] listOfFiles = root.listFiles();
    for (int i = 0; i < listOfFiles.length; i++) {
        String iName = listOfFiles[i].getName();
        if (listOfFiles[i].isFile()) {
            if (iName.endsWith(".txt") || iName.endsWith(".TXT")) {
                for (int j = 0; j < depth; j++) System.out.print("\t");
                System.out.println("File: "+iName);
            }
        }
        else if (listOfFiles[i].isDirectory()) {
            for (int j = 0; j < depth; j++) System.out.print("\t");
            System.out.println("Directory: "+iName);
            findFiles(listOfFiles[i], depth+1);
        }
    }
}

Respuestas a la pregunta(3)

Su respuesta a la pregunta