Согласно заданию файл название которого приходит как 2-й аргумент переименовывается в allFilesContent.txt. Содержимое всех фалов в директории и всех поддиректориях размером <=50byte переписывается в файл allFilesContent.txt. Все проверено с реальными адресами. Что же не так?
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) {
String path = args[0];
String resultFileAbsolutePath = args[1];
File fileBefore = new File(resultFileAbsolutePath);
File fileAfter = new File(path + "/allFilesContent.txt");
File pathFile = new File(path);
List<File> files = null;
if(FileUtils.isExist(fileBefore))
FileUtils.renameFile(fileBefore, fileAfter);
if(FileUtils.isExist(pathFile)){
files = getFilesInDirectory(pathFile);
files.sort(new Comparator<File>() {
@Override
public int compare(File o1, File o2) {
return o1.getName().compareTo(o2.getName());
}
});
for (File file : files){
System.out.println(file.getName());
}
}
if(files != null) {
try (FileOutputStream fos = new FileOutputStream(fileAfter)) {
for (File file : files) {
try (FileInputStream fis = new FileInputStream(file)) {
while (fis.available() > 0) {
fos.write(fis.read());
}
fos.write('\n');
}
}
} catch (IOException ignored) {
}
}
}
private static List<File> getFilesInDirectory(File directoryPath){
List<File> list = new ArrayList<>();
File[] files = directoryPath.listFiles();
File parentFile = directoryPath.getParentFile();
if(files != null) {
for (File file : files) {
if (!file.isDirectory() && file.length() <= 50) {
list.add(file);
}
}
}
if(parentFile != null){
list.addAll(getFilesInDirectory(parentFile));
}
return list;
}
}