Как искать файлы по размеру, и во вложенных папках?
Есть код, он проверяет указанную директорию и ищет в ней заданный файл по названию, как можно доработать этот код, что бы он искал файлы не по имени, а по их размеру (в байтах), и не только в указанной папке, но и в папках которые в этой папке.
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 шт):
У класса 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(), либо по этому же условию складывайте найденные папки в какую-нибудь коллекцию и потом ищите в них.