Прошу помощи в решении задачи.
Условие задачи:
Проход по дереву файлов
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.
Требования:
1. Файл, который приходит вторым параметром в main, должен быть переименован в allFilesContent.txt.
2. Нужно создать поток для записи в переименованный файл.
3. Пройдись по всем файлам в директории, которая приходит первым параметром в main, и всех ее поддиректориях. Файлы с размером более 50 байт нужно удалить используя метод FileUtils.deleteFile.
4. Содержимое всех файлов, размер которых не превышает 50 байт, должно быть записано в файл allFilesContent.txt в отсортированном по имени файла порядке.
5. Поток для записи в файл нужно закрыть.
Код:
package com.javarush.task.task31.task3101;
import java.io.*;
import java.util.*;
/*
Проход по дереву файлов
*/
public class Solution {
public static void main(String[] args) throws IOException {
File path = new File(args[0]); // папка с файлами
File resultFileAbsolutePath = new File(args[1]); // файл с результатами, который будем переименовывать
if (!resultFileAbsolutePath.exists()) resultFileAbsolutePath.createNewFile(); // создаем файл с результатами
File allFilesContent = new File(resultFileAbsolutePath.getParent() + "/allFilesContent.txt"); // будущий файл с результатами
if (allFilesContent.exists()) FileUtils.deleteFile(allFilesContent); // если новый файл уже был создан, удаляем его
FileUtils.renameFile(resultFileAbsolutePath, allFilesContent); // переименовываем файл с результатами
List<File> files = new ArrayList<>(); // создаем список, где будем хранить файлы, размер которых не превышает 50 байт
// проходим по директории и поддиректориям и добавляем файлы в список
Stack<File> stack = new Stack<>();
stack.push(path);
while(!stack.isEmpty()){
File file = stack.pop();
if (file.isDirectory()) {
for (File f : file.listFiles()) stack.push(f);
}
else if (file.isFile()) {
if (file.length() > 50) FileUtils.deleteFile(file);
else files.add(file);
}
}
//--------------------------------------------------------------------
// сортируем файлы в списке по имени
files.sort(new Comparator<File>() {
@Override
public int compare(File o1, File o2) {
return o1.getName().compareTo(o2.getName());
}
});
//----------------------------------
// открываем поток для записи в новый файл с результатами и записываем содержимое файлов из списка
try(FileOutputStream fos = new FileOutputStream(allFilesContent)){
for (File file : files){
try(FileInputStream fis = new FileInputStream(file)){
int c;
while ((c = fis.read()) != -1){
fos.write(c);
}
fos.write("\r\n".getBytes());
fos.flush();
}
}
}
//-------------------------------------------------------------------------------------------------
}
public static void deleteFile(File file) {
if (!file.delete()) System.out.println("Can not delete file with name " + file.getName());
}
}
Ответ валидатора: