Пробую два способа записи в файл, при #1 записываться содержимое дважды, при #2 попадаю в бессконечный цикл... Не могу понять в чем проблема, буду рад любой помощи.
P.S. Валидацию не проходит ни с первым, ни со вторым.
package com.javarush.task.task31.task3101;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.nio.file.*;
import java.nio.file.attribute.BasicFileAttributes;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
/*
Проход по дереву файлов
*/
public class Solution {
public static void main(String[] args) throws IOException {
String path = "/home/vladimir/Workspaces/Idea/JavaRushTasks/4.JavaCollections/src/com/javarush/task/task31/task3101";
String resultFileAbsolutePath = "/home/vladimir/Workspaces/Idea/JavaRushTasks/4.JavaCollections/src/com/javarush/task/task31/task3101/1.txt";
// String path = args[0];
// String resultFileAbsolutePath = args[1];
File file1 = new File(resultFileAbsolutePath);
File file2 = new File(file1.getParent() + "/allFilesContent.txt");
if (FileUtils.isExist(file1)) {
FileUtils.renameFile(file1, file2);
}
List<File> filesLessThan50 = new ArrayList<>();
try (FileOutputStream out = new FileOutputStream(file2)) {
Files.walkFileTree(Paths.get(path), new FileVisitor<Path>() {
@Override
public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs) throws IOException {
return FileVisitResult.CONTINUE;
}
@Override
public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {
if (attrs.size() < 50) {
filesLessThan50.add(file.toFile());
}
return FileVisitResult.CONTINUE;
}
@Override
public FileVisitResult visitFileFailed(Path file, IOException exc) throws IOException {
return FileVisitResult.CONTINUE;
}
@Override
public FileVisitResult postVisitDirectory(Path dir, IOException exc) throws IOException {
return FileVisitResult.CONTINUE;
}
});
filesLessThan50.sort(Comparator.comparing(File::getName));
// #1
for (File f : filesLessThan50) {
out.write(Files.readAllBytes(f.toPath()));
out.write("\n".getBytes());
}
// #2
// for (File file : filesLessThan50) {
// FileInputStream in = new FileInputStream(file);
// while (in.available() > 0) {
// out.write(in.read());
// }
// out.write("\n".getBytes());
// }
} catch (IOException e) {
e.printStackTrace();
}
}
}