Найти файлы с определенным расширением

Как вывести все файлы из каталога и всех подкаталогов с расширением txt ( выводит только файлы из каталога и название подкаталога ) ?`import java.io.File; import java.io.FilenameFilter; import java.io.SyncFailedException;

public class Zad1 {

public static void main(String[] args) {
    String dir = "C:\\Katalog";
    
    String ext = ".txt";
    
    findFiles(new File(dir), ext);
}

// метод поиска
private static void findFiles(File dir, String ext) {
    if(dir.isDirectory()){
            File file = new File(String.valueOf(dir));
            File[] listFiles = dir.listFiles(new MyFileNameFilter(ext));
            if(listFiles.length == 0){
                System.out.println(dir + " не содержит файлов с расширением " + ext);
            }else{
                for(File f : dir.listFiles()){
                    System.out.println("Файл: " + dir + File.separator + f.getName());
                }
        }

    }
    else{
        System.out.println(dir + " каталог не существует");
    }


}

// Реализация интерфейса FileNameFilter
public static class MyFileNameFilter implements FilenameFilter{

    private String ext;

    public MyFileNameFilter(String ext){
        this.ext = ext.toLowerCase();
    }
    @Override
    public boolean accept(File dir, String name) {
        return name.toLowerCase().endsWith(ext);
    }
}

}`


Ответы (1 шт):

Автор решения: Вячеслав Смирнов

Можно воспользоваться утилитным классом Files

Files.walk(Paths.get("D:\\temp"), FOLLOW_LINKS)
        .forEach(file -> {
            if(file.toFile().isFile() && file.toFile().getPath().endsWith(".txt")){
                System.out.println(file.getFileName());
            }
        });

В вашем примере не хватает рекурсивного прохождения - для каждой внутренней папки необходимо вызвать метод findFiles

→ Ссылка