Не могу понять в чем ошибка, протестировал с разным количеством вложенных каталогов, с разным количеством файлов - все работает. Почитал подсказки, советуют создавать и закрывать потоки вначале, тоже не помогает. Менял местами некоторые строчки, без изменения сути программы, тоже не помогает. Подскажите, что можно еще сделать? Прикрепляю последнюю версию класса Solution.
package com.javarush.task.task31.task3101;

import java.io.*;
import java.nio.file.Files;
import java.util.*;

/*
Проход по дереву файлов
*/
public class Solution {
	public static void main(String[] args) throws IOException {
		//создаем объекты File
		File dir = new File(args[0]);//директория

		File resultFileAbsolutePath = new File(args[0] + "/" + args[1]);

		File allFilesContent = new File(resultFileAbsolutePath.getParent() + "/allFilesContent.txt");
		FileUtils.renameFile(resultFileAbsolutePath, allFilesContent);

		FileOutputStream out = new FileOutputStream(allFilesContent);
		out.close();

		List<File> fileList = new ArrayList<>();//список для хранения всех файлов

		//проходим по каждому файлу/каталогу из исходной директории
		for (File file : dir.listFiles()) {
			walker(file, fileList);
		}
		//сортируем по имени файла
		fileList.sort(Comparator.comparing(File::getName));

		//открываем поток записи
		try (OutputStream writer = Files.newOutputStream(allFilesContent.toPath())) {
			//для каждого файла из списка
			for (File file : fileList) {
				//если файл существует
				if (FileUtils.isExist(file)) {
					//открываем поток чтения
					try (InputStream reader = Files.newInputStream(file.toPath())) {
						//пока есть непрочитанное
						while (reader.available() > 0) {
							//читаем и записываем строку
							byte[] buff = new byte[reader.available()];
							reader.read(buff);
							writer.write(buff);
						}
					} catch (IOException e) {
						e.printStackTrace();
					}
				}
				//добавляем в конце символ \n как того требует валидатор
				writer.write("\\n".getBytes());
			}
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

	//метод для обхода всех файлов
	private static void walker(File file, List<File> fileList) {
		//если файл директория
		if (FileUtils.isExist(file) && file.isDirectory()) {
			//для каждого файла в директории рекурсивно вызываем этот метод
			for (File f : file.listFiles()) {
				walker(f, fileList);
			}
			//иначе если файл это файл и длина файла в байтах меньше 50 - добавляем файл в список всех файлов
		} else if (FileUtils.isExist(file) && file.isFile() && (file.length() <= 50)) {
			fileList.add(file);
		}
	}
}