Вечная ошибка тестирования: Содержимое всех файлов, размер которых не превышает 50 байт, должно быть записано в файл allFilesContent.txt в отсортированном по имени файла порядке.
Проверял локально, всё работает отлично. Подскажите что не так.
package com.javarush.task.task31.task3101;
import java.io.*;
import java.nio.file.*;
import java.nio.file.attribute.BasicFileAttributes;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.EnumSet;
import java.util.List;
import java.util.stream.Collectors;
/*
Проход по дереву файлов
*/
public class Solution {
public static void main(String[] args) throws IOException {
joinFiles(args[0], args[1]);
//joinFiles("D://Test", "D://Test//suda.txt");
}
public static void joinFiles(String path, String resultFileAbsolutePath) throws IOException {
List<String> files = getFileTree(path);
FilesJoinner filesJoinner = new FilesJoinner(path, files);
filesJoinner.joinFiles(resultFileAbsolutePath);
}
public static List<String> getFileTree(String root) throws IOException {
GetFiles getFiles = new GetFiles();
Files.walkFileTree(Paths.get(root), EnumSet.of(FileVisitOption.FOLLOW_LINKS), 20, getFiles);
return getFiles.sorted();
}
public static class GetFiles extends SimpleFileVisitor<Path> {
List<Path> pathFiles;
public GetFiles() {
this.pathFiles = new ArrayList<>();
}
@Override
public FileVisitResult visitFile(Path path, BasicFileAttributes attrs) throws IOException {
/*if (path.toFile().isFile()) {
if (Files.size(path) <= 50) {
}
}
return FileVisitResult.CONTINUE;*/
File file = path.toFile();
if (file.isFile()) {
if (file.length() <= 50) {
pathFiles.add(path);
}
}
return super.visitFile(path, attrs);
}
public List<String> sorted() {
pathFiles.sort(Comparator.comparing(Path::getFileName));
return pathFiles.stream().map(u -> u.toAbsolutePath().toString()).collect(Collectors.toList());
}
}
public static class FilesJoinner {
String path;
List<String> files;
final String renameStr = "/allFilesContent.txt";
public FilesJoinner(String path, List<String> files) {
this.path = path;
this.files = files;
}
public void joinFiles(String joinedFileName) throws IOException {
File resultFile = new File(joinedFileName);
File dest = new File(resultFile.getParentFile() + renameStr);
if (FileUtils.isExist(dest)) {
FileUtils.deleteFile(dest);
}
FileUtils.renameFile(resultFile, dest);
PrintWriter printWriter = new PrintWriter(new FileOutputStream(dest));
BufferedReader bf;
for (String p : files) {
if (FileUtils.isExist(new File(p))) {
bf = new BufferedReader(new InputStreamReader(new FileInputStream(p)));
while (bf.ready()) {
printWriter.println(bf.readLine());
}
printWriter.println();
bf.close();
}
}
printWriter.close();
}
}
}