В общем, я, как и большинство здесь негодую, дескать на моих жалких тестах всё работает, сортируется и даже временами выдаёт нужный результат, а что именно не нравится валидатору в третьем пункте понять не могу. Надеюсь, вы поможете мне понять, что же я упустил из виду...
package com.javarush.task.task31.task3101;
import java.io.*;
import java.nio.file.*;
import java.nio.file.attribute.BasicFileAttributes;
import java.util.*;
/*
Проход по дереву файлов
*/
public class Solution {
public static void main(String[] args) throws IOException {
File path = new File(args[0]);
File resultFileAbsolutePath = new File(args[1]);
File allFilesContent = new File(resultFileAbsolutePath.getParent() + "/allFilesContent.txt");
if (FileUtils.isExist(resultFileAbsolutePath)) FileUtils.renameFile(resultFileAbsolutePath,allFilesContent);
SearchFileVisitor searchFileVisitor = new SearchFileVisitor();
Files.walkFileTree(Paths.get(args[0]), searchFileVisitor);
Collections.sort(searchFileVisitor.getFoundFiles(), Comparator.comparing(File::getName));
for (File file : searchFileVisitor.getFoundFiles()) {
try (BufferedReader reader = new BufferedReader(new FileReader(file));
BufferedWriter writer = new BufferedWriter(new FileWriter(allFilesContent, true))) {
while (reader.ready()) {
String string = reader.readLine();
writer.write(string);
writer.newLine();
}
writer.newLine();
writer.flush();
}
catch (IOException ex) {}
}
}
}
class SearchFileVisitor extends SimpleFileVisitor<Path> {
private List<File> foundFiles = new ArrayList<>();
private final int MIN_SIZE = 50;
public List<File> getFoundFiles() {
return foundFiles;
}
@Override
public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {
if (Files.readAllBytes(file).length <= MIN_SIZE) foundFiles.add(new File(file.toString()));
return FileVisitResult.CONTINUE;
}
}