Проблема с валидаторм:
1.Используй метод renameFile, чтобы переименовать входящий файл для результатов в allFilesContent.txt.
2. Содержимое всех файлов, размер которых не превышает 50 байт, должно быть записано в файл allFilesContent.txt в отсортированном по имени файла порядке.
Код ниже.
В целом я понимаю одну ошибку, это сортировка. Она работает не корректно.
Т.е. имена "123.txt", "2.txt", будут сортированы данным способом, как "123.txt", "2.txt", а должны наоборот. Есть какой то простой способ сортировать? Или надо свою писать сортировку?
А насчет переименования хз, вроде все работает, почему не нравится не понимаю.
Буду рад любой помощи;)
package com.javarush.task.task31.task3101;
import java.io.*;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/*
Проход по дереву файлов
*/
public class Solution {
public List<File> fileList; // список со всеми файлами подходящими под условие
public static void main(String[] args) throws IOException {
Solution sol1 = new Solution();
sol1.fileList = new ArrayList<>(); // инициализация списка
File renameFile = new File(args[1]);
String filenameNew = renameFile.getParent() + "\\" + "allFilesContent.txt"; //переименовываем путь к файлу который переименуем
renameFile.renameTo(new File(filenameNew)); // переименовываем файл
//System.out.println(renameFile.getName());
FileOutputStream fileOutputStream = new FileOutputStream(filenameNew, true); // создаем поток для записи
String folder = (args[0]); // путь директории
sol1.getFile(folder, sol1.fileList); // заполняем список файлами
sol1.fileList.sort(Comparator.comparing(File::getName)); // соритровка, которая НЕ РАБОТАЕТ
for (File fileInput : sol1.fileList) { // цикл запиливания всех файлов в 1
FileInputStream fileInputStream = new FileInputStream(fileInput.getAbsoluteFile());
while (fileInputStream.available() > 0) {
fileOutputStream.write(fileInputStream.read());
}
fileOutputStream.write('\n');
fileInputStream.close();
}
fileOutputStream.close();
}
public String getPath(String str) { //переход в диреткорию выше
Pattern pattern = Pattern.compile(".*(?=\\\\)"); //
Matcher matcher = pattern.matcher(str);
if (matcher.find()) {
str = matcher.group();
return str;
} else return null;
}
public void getFile(String folder, List<File> fileList) { // получаем путь к директории
File folders = new File(folder); // пробегаемся по всей директории и
for (File file : folders.listFiles()) // проверяем файлы, которые соотвествуют условию
{ //
if (file.isFile() && file.length() < 50) // это файл и объем менее 50
{
fileList.add(file);
}
}
String backFolder = getPath(folder); // получаем путь директории "выше"
if (backFolder != null) { // если все ок, рекурсия
getFile(backFolder, fileList);
}
}
}