File file = new File(args[1]);
File renameFile = new File(file.getParent()+"/"+"allFilesContent.txt");
FileUtils.renameFile(file,renameFile);
В результате создается новый файл allFilesContent.txt
Данные записываются в старый result, который не переименовывается.
Валя орет по 2 и 4 пунктам.
_____________________________________________________________________________________
Прошли сутки, никто не отвечает, видимо вопрос не простой), нашел подобный вопрос от другого пользователя, решения он так и не нашел.
Есть вероятность, что проблема где-то в ОС(доступы к файлам или что-то в этом духе)
Тот же пользователь отписался, что если код работает верно, валидатор его примет.
Т.к. мой код валидатор не принимает, значит где-то зарыта ошибка.
Знатоков прошу взглянуть на код и протестировать на своих ПК (т.к. я этого сделать не могу😞)
______________________________________________________________________________________
Предположил, что при одинаковых именах файлов лежащих в разных папках, карта fileNames будет некорректна, исправил так:
Map<String, File> fileNames = new TreeMap<>();
for (File f : files) {
if (f.length() <= 50) {
String s = "0";
if(!fileNames.containsKey(f.getName()))
{fileNames.put(f.getName(), f);}
else {s +=s; fileNames.put(f.getName()+s, f); }
}
}
Не помогло.
______________________________________________________________________________________
Перенес открытие потока записи сразу после (неработающего) переименования и записал не в начальный файл, а в renameFile(который вообще создавался как промежуточное звено для переименования. Валидатор одобрительно похлопал по плечу. (21 попытка🤡)
Тему не закрываю, в надежде, что кто-нибудь все таки прольет свет на всю эту историю или все менее уважаемые (за свою безучастность) разработчики отладят механизм валидации.
package com.javarush.task.task31.task3101;
import java.io.*;
import java.util.*;
/*
Проход по дереву файлов
*/
public class Solution {
public static void main(String[] args) throws IOException {
File file = new File(args[1]);
File renameFile = new File(file.getParent()+"/"+"allFilesContent.txt");
FileUtils.renameFile(file,renameFile);
System.out.println(file.getAbsolutePath());
File path = new File(args[0]);
List<File> files = processFilesFromFolder(path);
/* for (File test: files
) {
System.out.println(test.getAbsolutePath());
System.out.println("_________________");
}*/
Map<String, File> fileNames = new TreeMap<>();
for (File f : files) {
if (f.length() <= 50) {
fileNames.put(f.getName(), f);
}
}
FileOutputStream outputStream = new FileOutputStream(file, true);
for (Map.Entry<String, File> entry : fileNames.entrySet()
) {
//System.out.println(entry.getKey());
FileInputStream inputStream = new FileInputStream(entry.getValue());
//FileWriter writer = new FileWriter(renameFile, true);
while (inputStream.available() > 0) {
outputStream.write(inputStream.read());
outputStream.flush();
}
outputStream.write("\n".getBytes());
outputStream.flush();
inputStream.close();
}
outputStream.close();
}
public static List<File> processFilesFromFolder(File folder) {
List<File> files = new ArrayList<>();
File[] folderEntries = folder.listFiles();
for (File entry : folderEntries) {
if (entry.isDirectory()) {
List<File> files2 = new ArrayList<>();
files2 = processFilesFromFolder(entry);
for (File f: files2
) {files.add(f);
}
continue;
}
files.add(entry);
}
return files;
}
}