Помогите побороть валидатор. :)
файлы отсортированы по именам (getName), автоматом через TreeMap,
под-подкаталоги - учитываются. Предыдущая задача 3102 - оттуда через Queue все содрано.
записываю в варианте - весь файл в строку + "\n" - т.к. читал тут в ответах, что так и надо(а не через char[] buffChar).
Сортировка по именам. Все пишется,читается переименовывается и удаляется файл 123.ТХТ который я подсовываю для теста переименования.
ЕСЛИ написать
BufferedWriter writer = new BufferedWriter(new FileWriter(renamedAdress));
в самом начале, и закрыть только в конце - пишет, что вы не закрыли WRITER. Прочитал про проблему в ответах к задачке - человек сдал ее, написав дважды BufferedWriter writer = new BufferedWriter(new FileWriter(renamedAdress)); - в самом начале, и закрыв его тут же, и в самом конце - открыв для записи и закрыв.
В таком варианте - п.3 не проходит! :) (а в варианте выше - п.3 ПРОХОДИТ, но не проходит п.4.)
делал через writer и writer1 - т.е. создавал и закрывал два потока разных - не прокатило.
Сейчас в фале - закрываю writer и тут же открываю его ниже (и опять закрываю) - не прокатывает п.3.
Где не так? какой комбинацией победить валидатор?
Спасибо! :)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 adress = new File(args[1]);
// File path = new File("c:/Program Files/7-Zip");
// File adress = new File("c:/123.txt");
File renamedAdress = new File (adress.getParent() +"/"+ "allFilesContent.txt");
if (FileUtils.isExist(adress)){
FileUtils.renameFile(adress, renamedAdress);
}
BufferedWriter writer = new BufferedWriter(new FileWriter(renamedAdress));
writer.close();
Map<String, String> mapOfFileNames = new TreeMap<>();
Queue<File> queue = new LinkedList<>();
File fileAll;
queue.add(path);
while (queue.peek() != null){
fileAll = queue.remove().getAbsoluteFile();
for (File f : Objects.requireNonNull(fileAll.listFiles())) {
if (f.isDirectory()) {
queue.add(f);
} else {
if (f.length() <= 50){
mapOfFileNames.put(f.getName(),f.getAbsolutePath());
}
}
}
}
// mapOfFileNames.forEach((key, value) -> System.out.println(key + " " + value));
writer = new BufferedWriter(new FileWriter(renamedAdress));
for (Map.Entry<String, String> entry : mapOfFileNames.entrySet()) {
File contentOfFile = new File (entry.getValue());
BufferedReader reader = new BufferedReader(new FileReader(contentOfFile));
while (reader.ready()){
String str =reader.readLine();
if(!reader.ready()){
writer.write(str + "\n");
}else {
writer.write(str);
}
}
reader.close();
// char[] charArray = new char[(int) contentOfFile.length()];
// reader.read(charArray);
// writer.write(charArray);
// writer.write("\n");
}
writer.close();
}
}