немного сумбурный код, но работает вроде как корректно. Дело в валике?
package com.javarush.task.task31.task3101;
import java.io.*;
import java.nio.file.*;
import java.util.*;
/*
Проход по дереву файлов
*/
public class Solution {
public static void main(String[] args) throws IOException {
TreeSet<File> set = new TreeSet<>(new Comparator<File>() {
@Override
public int compare(File o1, File o2) {
return o1.getName().compareTo(o2.getName());
}
});
File fileToRename = new File(args[1]);
String folder = fileToRename.getParent();
File outputFile = new File(folder + "\\allFilesContent.txt");
if (FileUtils.isExist(fileToRename)) {
FileUtils.renameFile(fileToRename, outputFile);
FileUtils.deleteFile(fileToRename);
}
try (PrintWriter pw = new PrintWriter(outputFile)) {
File folders = new File(args[0]);
if (FileUtils.isExist(folders)) {
ArrayList<String> fileNamesToWrite = recursive(folders);
for (String s : fileNamesToWrite) {
File fileToCheckSize = new File(s);
if (fileToCheckSize.length() <= 50) {
set.add(fileToCheckSize);
}
}
for (File f : set) {
try (BufferedReader bf = new BufferedReader(new FileReader(f.getAbsolutePath()))) {
while (bf.ready()) {
pw.println(bf.readLine());
}
}
}
}
}
}
public static ArrayList<String> recursive(File folder) throws IOException {
ArrayList<String> result = new ArrayList<>();
try (DirectoryStream<Path> ds = Files.newDirectoryStream(Paths.get(folder.getAbsolutePath()))) {
for (Path d : ds) {
File current = d.toFile();
if (current.isDirectory()) {
recursive(current);
} else {
result.add(current.getAbsolutePath());
}
}
}
return result;
}
}