Поток FileOutputStream создаю через try-with-resourses. Какого лешего он не проходит в 2 и 4 пунктах ума не приложу.
По результату локально все верно, в allFilesContent.txt записано содержимое всех файлов размер которых <= 50 и в отсортированном по именам файлов порядке.
Может надо использовать не FileOutputStream? Одно дело когда не работает и не принимает, другое когда работает и не принимает. Куда двигаться?
package com.javarush.task.task31.task3101;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.nio.file.*;
import java.nio.file.attribute.BasicFileAttributes;
import java.util.*;
/*
Проход по дереву файлов
*/
// //D:\javaTestFiles\ //D:\javaTestFiles\result.txt
public class Solution {
public static void main(String[] args) throws IOException {
File path = new File(args[0]);
File resultFileAbsolutePath = new File(args[1]);
File allFilesContent = new File(resultFileAbsolutePath.getParent() + "\\allFilesContent.txt");
if (FileUtils.isExist(resultFileAbsolutePath)) {
if (!FileUtils.isExist(allFilesContent)) FileUtils.renameFile(resultFileAbsolutePath, allFilesContent);
else {
FileUtils.deleteFile(allFilesContent);
FileUtils.renameFile(resultFileAbsolutePath, allFilesContent);
}
} else {
if (!FileUtils.isExist(allFilesContent)) Files.createFile(allFilesContent.toPath());
}
//пробегаемся по папке(включая вложенных) и записываем в TreeMap отсеянные пары (имя файла - содержимое)
Files.walkFileTree(path.toPath(), new MyFileVisitor());
TreeMap<String, byte[]> res = MyFileVisitor.smallFiles;
//открываем поток для записи и пишем не забывая содержимое разных файлов разделять \n
try (FileOutputStream fos = new FileOutputStream(allFilesContent)) { //поток закроется так как try-with-resources
for (Map.Entry<String, byte[]> element : res.entrySet()) {
fos.write(element.getValue());
fos.write(("\n").getBytes(StandardCharsets.UTF_8));
}
} catch (IOException e) {
e.printStackTrace();
}
}
public static class MyFileVisitor extends SimpleFileVisitor<Path> {
public static TreeMap<String, byte[]> smallFiles = new TreeMap<>();
public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {
if (!file.endsWith("allFilesContent.txt") && file.toFile().length() <= 50) {
smallFiles.put(file.getFileName().toString(), Files.readAllBytes(file));
}
return FileVisitResult.CONTINUE;
}
}
}