Как искать файлы по размеру, и во вложенных папках?

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

import java.io.File;

public class Main {

    public static void main(String[] argv) throws Exception
    {
        File directory = new File("C:\\Users\\excit\\Desktop");

        String[] flist = directory.list();
        int flag = 0;
        if (flist == null) {
            System.out.println("Empty directory.");
        }
        else {
            for (int i = 0; i < flist.length; i++) {
                String filename = flist[i];
                if (filename.equalsIgnoreCase("pom.xml")) {
                    System.out.println(filename + " found");
                    flag = 1;
                }
            }
        }
        if (flag == 0) {
            System.out.println("File Not Found");
        }
    }
}

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

Автор решения: Adm123

У класса File есть перегруженный метод list, принимающий параметром реализацию интерфейса FilenameFilter. Таким образом Вы можете отфильтровать результаты поиска по нужным критериям. Например:

public class Main {

    public static final int MIN_LENGTH = 5;
    public static final String NAME_TO_SEARCH = "pom.xml";

    public static void main(String[] args) {
        File directory = new File("C:\\Users");
        if (directory.isDirectory()) {
            String[] fileList = directory.list((dir, name) -> {
                File file = (new File(dir + "\\" + name));
                return file.isFile() && file.length() >= MIN_LENGTH && name.equalsIgnoreCase(NAME_TO_SEARCH);
            });
            if (fileList != null) {
                System.out.println(Arrays.toString(Arrays.stream(fileList).toArray()));
            }
        }
    }

}

Ну а для поиска во вложенных папках - вынесите этот код из psvm в отдельный метод и либо дергайте его рекурсивно по условию file.isDirectory(), либо по этому же условию складывайте найденные папки в какую-нибудь коллекцию и потом ищите в них.

→ Ссылка