package com.javarush.task.task31.task3101;
import java.io.*;
import java.nio.file.*;
import java.nio.file.attribute.BasicFileAttributes;
import java.util.*;
/*
C:\Users\Елизавета\Desktop\TestFolder
C:\Users\Елизавета\Desktop\resultFileAbsolutePath.txt
*/
public class Solution {
public static void main(String[] args) throws IOException {
Path folder = Paths.get(args[0]);//папка для обхода, 1 аргумент
System.out.println("#1 " + folder.getParent().toString() + "\\" +folder.getFileName());
File sourceFile = new File(args[1]);// файл, куда будет записан результат
System.out.println("#2 " + sourceFile.getName());
File resultFile = new File(sourceFile.getParent() + "/allFilesContent.txt"); //файл, в который будет переименоват результирующий файл
System.out.println("#3 " + resultFile.getName());
TreeMap<String, Path> map = new TreeMap<>();
System.out.println("#4 create TreeMap");
if (FileUtils.isExist(resultFile)){
//если в условии isExist, то 5 и 6 пункт выполняются, но результат - Can not rename file with name resultFileAbsolutePath.txt
//если в условии !isExist, то 5 и 6 пункт игнорируются
System.out.println("#5 try to rename file");
FileUtils.renameFile(sourceFile, resultFile);
System.out.println("#6 rename?");
}
Files.walkFileTree(folder, new SimpleFileVisitor<Path>(){
@Override
public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {
System.out.println("#7 escape to method visitFile");
if (!Files.isDirectory(file) && Files.readAllBytes(file).length<=50){
System.out.println("#8 map.put");
map.put(file.getFileName().toString(), file);
}
return super.visitFile(file, attrs);
}
});
try (BufferedWriter writer = new BufferedWriter(new FileWriter(resultFile, true))){
System.out.println("#8 write data from msp to file:");
for (Map.Entry<String, Path> entry : map.entrySet()) {
System.out.println("Key = " + entry.getKey() + ", Value = " + entry.getValue()); //this statement prints out my keys and values
BufferedReader reader = new BufferedReader(new FileReader(entry.getValue().toFile()));
while (reader.ready()) {
writer.write(reader.readLine());
writer.write(System.lineSeparator());
}
reader.close();
System.out.println("Done");
}
}
}
}
Результат логов:
#1 C:\Users\Елизавета\Desktop\TestFolder
#2 resultFileAbsolutePath.txt
#3 allFilesContent.txt
#4 create TreeMap
#5 try to rename file
Can not rename file with name resultFileAbsolutePath.txt
#6 rename?
#7 escape to method visitFile
#8 map.put
#7 escape to method visitFile
#7 escape to method visitFile
#8 map.put
#8 write data from msp to file:
Key = FileForTest-1.txt, Value = C:\Users\Елизавета\Desktop\TestFolder\FileForTest-1.txt
Done
Key = FileForTest-3.txt, Value = C:\Users\Елизавета\Desktop\TestFolder\InnerTestFolder\FileForTest-3.txt
Done
Process finished with exit code 0
Обход папок и запись в файл проходит хорошо и правильно. package com.javarush.task.task31.task3101;
import java.io.*;
import java.nio.file.*;
import java.nio.file.attribute.BasicFileAttributes;
import java.util.*;
/*
Проход по дереву файлов
1. На вход метода main подаются два параметра.
Первый - path - путь к директории, второй - resultFileAbsolutePath - имя существующего файла, который будет содержать результат.
2. Для каждого файла в директории path и в ее всех вложенных поддиректориях выполнить следующее:
Если у файла длина в байтах НЕ больше 50, то для всех таких файлов:
2.1. Отсортировать их по имени файла в возрастающем порядке, путь не учитывать при сортировке.
2.2. Переименовать resultFileAbsolutePath в 'allFilesContent.txt' (используй метод FileUtils.renameFile, и, если понадобится, FileUtils.isExist).
2.3. В allFilesContent.txt последовательно записать содержимое всех файлов из п. 2.2.1. После каждого тела файла записать "\n".
Все файлы имеют расширение txt.
В качестве разделителя пути используй "/".
C:\Users\Елизавета\Desktop\TestFolder
C:\Users\Елизавета\Desktop\resultFileAbsolutePath.txt
*/
public class Solution {
public static void main(String[] args) throws IOException {
Path folder = Paths.get(args[0]);//папка для обхода, 1 аргумент
System.out.println("#1 " + folder.getParent().toString() + "\\" +folder.getFileName());
File sourceFile = new File(args[1]);// файл, куда будет записан результат
System.out.println("#2 " + sourceFile.getName());
File resultFile = new File(sourceFile.getParent() + "/allFilesContent.txt"); //файл, в который будет переименоват результирующий файл
System.out.println("#3 " + resultFile.getName());
TreeMap<String, Path> map = new TreeMap<>();
System.out.println("#4 create TreeMap");
if (FileUtils.isExist(resultFile)){
//если в условии isExist, то 5 и 6 пункт выполняются, но результат - Can not rename file with name resultFileAbsolutePath.txt
//если в условии !isExist, то 5 и 6 пункт игнорируются
System.out.println("#5 try to rename file");
FileUtils.renameFile(sourceFile, resultFile);
System.out.println("#6 rename?");
}
Files.walkFileTree(folder, new SimpleFileVisitor<Path>(){
@Override
public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {
System.out.println("#7 escape to method visitFile");
if (!Files.isDirectory(file) && Files.readAllBytes(file).length<=50){
System.out.println("#8 map.put");
map.put(file.getFileName().toString(), file);
}
return super.visitFile(file, attrs);
}
});
try (BufferedWriter writer = new BufferedWriter(new FileWriter(resultFile, true))){
System.out.println("#8 write data from msp to file:");
for (Map.Entry<String, Path> entry : map.entrySet()) {
System.out.println("Key = " + entry.getKey() + ", Value = " + entry.getValue()); //this statement prints out my keys and values
BufferedReader reader = new BufferedReader(new FileReader(entry.getValue().toFile()));
while (reader.ready()) {
writer.write(reader.readLine());
writer.write(System.lineSeparator());
}
reader.close();
System.out.println("Done");
}
}
}
}