Все по условиям:
- все приватные поля созданы с нужными именами в нужном классе
- сеттеры для параметров поиска и геттер для списка созданы
- критерии используются и работают на практике
- пакетов лишних вроде тоже не использую
Хоть по одному то параметру должен же был пройти. Впервые такое. Даже не понимаю куда смотреть.
package com.javarush.task.task31.task3111;
import java.io.IOException;
import java.nio.file.*;
import java.nio.file.attribute.BasicFileAttributes;
import java.util.ArrayList;
import java.util.List;
/*
Продвинутый поиск файлов
*/
public class Solution {
public static void main(String[] args) throws IOException {
SearchFileVisitor searchFileVisitor = new SearchFileVisitor();
searchFileVisitor.setPartOfName("amigo");
searchFileVisitor.setPartOfContent("programmer");
searchFileVisitor.setMinSize(500);
searchFileVisitor.setMaxSize(10000);
Files.walkFileTree(Paths.get("D:/SecretFolder"), searchFileVisitor);
// Files.walkFileTree(Paths.get("E:/java/tests"), searchFileVisitor);
List<Path> foundFiles = searchFileVisitor.getFoundFiles();
for (Path file : foundFiles) {
System.out.println(file);
}
}
public static class SearchFileVisitor extends SimpleFileVisitor {
private List<Path> foundFiles = new ArrayList<>();
private String partOfName = "";
private String partOfContent = "";
private int maxSize = Integer.MAX_VALUE;
private int minSize = 0;
public FileVisitResult visitFile(Object file, BasicFileAttributes attrs) throws IOException {
Path path = (Path) file;
int lenght = (int) path.toFile().length();
// cheking
if (!path.getFileName().toString().contains(partOfName)) return FileVisitResult.CONTINUE;
if (!Files.readAllLines(path)
.stream()
.anyMatch(s -> s.contains(partOfContent))) return FileVisitResult.CONTINUE;
if (!(lenght >= minSize && lenght <= maxSize)) return FileVisitResult.CONTINUE;
foundFiles.add(path);
// return super.visitFile(file, attrs);
return FileVisitResult.CONTINUE;
}
public void setPartOfName(String partOfName) {
this.partOfName = partOfName;
}
public void setPartOfContent(String partOfContent) {
this.partOfContent = partOfContent;
}
public void setMinSize(int minSize) {
this.minSize = minSize;
}
public void setMaxSize(int maxSize) {
this.maxSize = maxSize;
}
public List<Path> getFoundFiles() {
return foundFiles;
}
}
}