Решение, вроде, рабочее. Понимаю, что не проверяю все возможные поддиректории в поддиректориях в path, но условие это и не подразумевает, вроде. Тогда в чем проблема?
package com.javarush.task.task31.task3101;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Map;
import java.util.Objects;
import java.util.TreeMap;
/*
Проход по дереву файлов
*/
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);
}
TreeMap<String, File> fileWeight = new TreeMap<>();
File[] files = path.listFiles();
for (File file : Objects.requireNonNull(files)) {
if (file.isFile() && file.length() <= 50) {
fileWeight.put(file.getName(), file);
}
if (file.isDirectory()) {
for (File fileWithin : Objects.requireNonNull(file.listFiles())) {
if (fileWithin.isFile() && fileWithin.length() <= 50) {
fileWeight.put(fileWithin.getName(), fileWithin);
}
}
}
}
BufferedWriter writer = new BufferedWriter(new FileWriter(allFilesContent));
for (Map.Entry<String, File> pair : fileWeight.entrySet()) {
BufferedReader reader = new BufferedReader(
new InputStreamReader(new FileInputStream(pair.getValue())));
while (reader.ready()) {
writer.write(reader.readLine());
writer.write("\n");
}
reader.close();
}
writer.close();
}
}