• ,

task31.3101 неправильный вывод

Друзья, помогите пожалуйста. Проблема такая, задачу решил, валидатор скушал, но вывод получается неправильный. Понимаю, что-то не так с компаратором, но что именно допереть не могу. Без компаратора читает и пишет из директорий хорошо, но соответственно без сортировки. С сортировкой получается приведенный ниже вывод.Пробовал вынести из try-with-resources — вообще не сортирует. Подскажите что не так, хочется понять.

Условие:
Проход по дереву файлов

1. На вход метода main подаются два параметра.

Первый — path — путь к директории, второй — resultFileAbsolutePath — имя файла, который будет содержать результат.

2. Для каждого файла в директории path и в ее всех вложенных поддиректориях выполнить следующее:

2.1. Если у файла длина в байтах больше 50, то удалить его (используй метод FileUtils.deleteFile).

2.2. Если у файла длина в байтах НЕ больше 50, то для всех таких файлов:

2.2.1. Отсортировать их по имени файла в возрастающем порядке, путь не учитывать при сортировке.

2.2.2. Переименовать resultFileAbsolutePath в ‘allFilesContent.txt‘ (используй метод FileUtils.renameFile).

2.2.3. В allFilesContent.txt последовательно записать содержимое всех файлов из п. 2.2.1. Тела файлов разделять «n«.

Все файлы имеют расширение txt.
Код:
public class Solution {
    private static ArrayList<File> listFiles = new ArrayList<>();
    public static void main(String[] args)
    {
        String path = "C:\\Users\\User\\Desktop\\path";
        String absolutePath = "C:\\Users\\User\\Desktop\\path\\random.txt";
        File fileAbsolutePath = new File(absolutePath);
        File file = new File(fileAbsolutePath.getParent() + "/allFilesContent.txt");
        FileUtils.renameFile(fileAbsolutePath, file);

        try(FileOutputStream out = new FileOutputStream(file))
        {
            recursive(path);
            listFiles.sort(new Comparator<File>() {
                @Override
                public int compare(File o1, File o2) {
                    return o1.getName().compareTo(o2.getName());
                }
            });


            for (File file1: listFiles)
            {
                try(FileInputStream in = new FileInputStream(file1))
                {
                    while (in.available() > 0)
                    {
                        out.write(in.read());
                    }

                }
                out.write(System.lineSeparator().getBytes());
            }

        }
        catch (IOException e)
        {

        }

    }

    public static void deleteFile(File file) {
        if (!file.delete()) System.out.println("Can not delete file with name " + file.getName());
    }

    public static void recursive(String path)
    {
        File[] list = new File(path).listFiles();

        for (File file: list)
        {
            if (file.isDirectory())
            {
                recursive(file.getAbsolutePath());
            }
            else if (file.isFile())
            {
                if (file.length() > 50)
                {
                    FileUtils.deleteFile(file);
                }
                else listFiles.add(file);
            }
        }

    }

   /*static class NameComparator implements Comparator<File>
    {
        public int compare(File o1, File o2) {
            return o1.getName().compareTo(o2.getName());
        }
    } */
}

Директории:
C:\Users\User\Desktop\path\random.txt
C:\Users\User\Desktop\path\path1\2\c.txt
C:\Users\User\Desktop\path\path1\b.txt
C:\Users\User\Desktop\path\path2\a.txt

Ожидаемый вывод:
Letter A
Letter B
Letter C

Реальный вывод:
Letter A
Letter A
Letter A
Letter A

Комментариев нет

Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.