Как проверить расширение файла?

125
05 марта 2021, 23:10

Есть метод, который проходит по папкам и подпапкам.

Если он встречает папку, то закидывает её в очередь, а если файл, то должен проверить его расширение, и если оно совпадает с введённым – вывести имя файла.

Но он у меня не работает. Я только учусь.

P.S.
Кусок с фильтром взял из интернета.

 public static void walker(File rootPapka) {
    ArrayList<File> allFiles = new ArrayList<>();
    ArrayDeque<File> papky = new ArrayDeque<File>();
    papky.add(rootPapka);
    while (papky.peek() != null) {
        File[] open = papky.getFirst().listFiles();
        for (File entry : open) {
            if (entry.isDirectory()) {
                papky.add(entry);
            } else {
                String[] files = entry.list(new FilenameFilter() {
                    @Override public boolean accept(File folder, String name) {
                        return name.endsWith(".txt");
                    }
                });
                for ( String fileName : files ) {
                    System.out.println("File: " + fileName);
                }
            }
        }
    }
}
Answer 1

Если я правильно понял, то вам нужно вывести имена всех файлов в дереве каталогов. Для этого существуют удобные методы:

1) walkFileTree c созданием FileVisitor:

Files.walkFileTree(Paths.get("C:/folder"), new FileVisitor<Path>() {
            @Override
            public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs) throws IOException {
                return FileVisitResult.CONTINUE;
            }
            @Override
            public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {
                if(file.getFileName().endsWith(".txt")) System.out.println("File: " + file.getFileName());
                return FileVisitResult.CONTINUE;
            }
            @Override
            public FileVisitResult visitFileFailed(Path file, IOException exc) throws IOException {
                return FileVisitResult.CONTINUE;
            }
            @Override
            public FileVisitResult postVisitDirectory(Path dir, IOException exc) throws IOException {
                return FileVisitResult.CONTINUE;
            }
        });

2) walk с созданием Stream:

Files.walk(Paths.get("C:/folder"), FileVisitOption.FOLLOW_LINKS).forEach(file -> {
            if (!file.toFile().isDirectory() && if(file.getFileName().endsWith(".txt"))) System.out.println(file.getFileName());
        });
READ ALSO
Как получить объект из List по условию, при этом удалив его из списка?

Как получить объект из List по условию, при этом удалив его из списка?

Есть класс Alpha, у него String name QWERTY Есть Arraylist list Экземпляр туда добавлен, но вернуть его не могу

149
Вычитание строк

Вычитание строк

Вычитанием строк назовем операцию при которой все буквы вычитаемого вычеркиваются из уменьшаемого, а если в уменьшаемом таких букв не было...

110
Java.Spring. BlockingQueue&lt;&gt;

Java.Spring. BlockingQueue<>

Я в спринге задаю бин

134
Spring WebSocket и SockJS c использованием JWT

Spring WebSocket и SockJS c использованием JWT

Есть приложение на Spring boot 2, в котором пользователи авторизуюца и получают access keyКлиентская часть крутится на nodejs

109