Прошу просмотреть объяснения и дополнить непонимания)
package com.javarush.task.task31.task3101;
import java.io.*;
import java.util.ArrayList;
import java.util.TreeSet;
/*
Проход по дереву файлов
*/
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");
FileUtils.renameFile(resultFileAbsolutePath,allFilesContent); //переименовали
try (FileOutputStream out = new FileOutputStream(allFilesContent)){
//FileOutputStream out = new FileOutputStream(allFilesContent); // почему при таком способе,
// не выполнялось условия закрытия потока ?
fill(path.getPath()); //Не понимаю, что тут происходит ?
for(File file : myFiles) {
FileInputStream fileInputStream = new FileInputStream(file);
while (fileInputStream.available()>0) {
out.write(fileInputStream.read());
}
out.write(System.lineSeparator().getBytes());
out.flush();
}
out.close();
} catch (FileNotFoundException a) {
}
}
private static TreeSet<File> myFiles = new TreeSet<>();//тут автоматом отсортируется)
private static void fill(String path) {
File[] allFiles = new File(path).listFiles(); // получаю массив файлов, которые содержатся в данной директории
for(File file : allFiles) {
if(file.isDirectory()) { //проверяю, лежит ли тот файл в нужной директории
fill(file.getAbsolutePath()); // получаю полный путь файла
continue;
}
if(file.length()>50) { // если длина файла больше 50байт - удаляю с помощью метода
FileUtils.deleteFile(file);
}
else {
myFiles.add(file); //добавляю в колекцию
}
}
}
}Pavel
36 уровень
Объяснения
Архивный
Комментарии (3)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Pavel
5 января 2018, 13:14
Path toPath() - Возвращает объект Path, который соответствует текущему объекту File.
Не могу до конца понять, что это означает. Пожалуйста, разъясните)
URI toUri() - Возвращает URI текущего пути/файла. Это что такое ?
File toFile() - Возвращает объект File, который соответствует текущему объекту Path. Тут возвращает, файл, который соответствует указанному пути в Path ?
0
Стас ПасинковSoftware Developer в ZipyMaster
5 января 2018, 15:37
могу предложить почитать документацию :)
Path - объект пути
URI - объект URI
File - объект элемента файловой системы (может быть файл, а может быть и папка)
и вот этот тред на стековерфлоу можете почитать :)
+1
Стас ПасинковSoftware Developer в ZipyMaster
5 января 2018, 12:35
потому что не хватало строки out.close() чтобы явно закрыть поток :)
когда вы используете try with resources (ну это когда поток открываете сразу после try там в скобочках) - то строка out.close() вызовется неявно (ну то-есть, джава ее сама вызовет когда выйдет из блока try-catch)
немного не так. тут получается, что ифом вы проверяете является ли данный элемент папкой/директорией, и если да - то запускаете этот же метод по поиску файлов снова (рекрусивно), но уже именно для этой папки/директории.
0