Самое сложное разгадать тайные послания валидатора, когда все вроде работает, но он говорит - все неправильно. Выводит все верно, пропускает файлы, у которых размер больше, записывает в единый файл тоже все как в задании. Ошибку пытался час найти, которой по моему мнению тут нет.
package com.javarush.task.task31.task3101;
import java.io.*;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
/*
Проход по дереву файлов
*/
public class Solution {
public static void main(String[] args) {
File path = new File(args[0]);
File resultFileAbsolutePath = new File(args[1]);
File newFile = new File(resultFileAbsolutePath.getParent() + "/allFilesContent.txt");;
Map<File, String> mapFiles = new HashMap<>();
ArrayList<String> listFileName = new ArrayList<>();
renameFile(resultFileAbsolutePath, newFile);
searchFiles(path, mapFiles, listFileName);
sortFilesName(listFileName);
writeToFile(mapFiles, listFileName, newFile);
}
public static void writeToFile(Map<File, String> mapFiles, ArrayList<String> listFileName, File newFile) {
for(int i = 0; i < listFileName.size(); ++i) {
File entry = new File("");
for(Map.Entry<File, String> tempEntry : mapFiles.entrySet())
if(tempEntry.getValue().equals(listFileName.get(i))) {
entry = tempEntry.getKey();
break;
}
try(BufferedReader readerContent = new BufferedReader(new FileReader(entry));
FileWriter fileWriter = new FileWriter(newFile, true);
BufferedWriter writerContent = new BufferedWriter(fileWriter)
) {
String str;
while(readerContent.ready()) {
str = readerContent.readLine();
writerContent.write(str);
}
writerContent.newLine();
}catch(IOException exc) { exc.printStackTrace(); }
}
}
public static void sortFilesName(ArrayList<String> listFileName) {
Collections.sort(listFileName);
}
public static void searchFiles(File path, Map<File, String> mapFiles, ArrayList<String> listFileName) {
File[] folderEntries = path.listFiles();
for(File entry : folderEntries) {
if(entry.isDirectory()) {
searchFiles(entry, mapFiles, listFileName);
continue;
}
else if(entry.length() <= 50){
mapFiles.put(entry, entry.getName());
listFileName.add(entry.getName());
}
}
}
public static void renameFile(File file, File newFile) {
if(FileUtils.isExist(file))
FileUtils.renameFile(file, newFile);
}
}