Найти файлы с определенным расширением
Как вывести все файлы из каталога и всех подкаталогов с расширением 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