Настройка вывода данных массива
Есть код который выводит все папки нужного размера из выбранной директории. Код работает и выводит построчно названия соответ.условию файлов, но мне нужно, что бы помимо названия файла, выводился его размер и через пробел путь к этому файлу,
Т.е. сейчас выводиться например: name.txt , а необходимо: 500kb /Users/Desktop/name.txt
Я понимаю, что в моем случае размер файла находим методом file.length(), но куда его вставить не пойму.
import java.io.File;
import java.util.stream.Stream;
public class Main {
public static final int MIN_LENGTH = 150; //размер файла в байтах
public static void main(String[] args) {
File directory = new File("C:\\Users\\Desktop\\"); // путь к нужной директории
if (directory.isDirectory()) {
String[] fileList = directory.list((dir, name ) -> {
File file = (new File(dir + "\\" + name ));
return file.isFile() && file.length() >= MIN_LENGTH ;
});
if (fileList != null) {
Stream.of(fileList).forEach(System.out::println); // вывод в консоль построчно, а не в массиве
}
}
}
}
Ответы (1 шт):
Автор решения: gil9red
→ Ссылка
Отдельно объявил фильтр и сделал перебор по File, а результаты вывел в цикле
Пример:
File directory = new File("C:\\Users\\excit\\Desktop\\dpo_java_basics-master(2)"); // путь к нужной директории
if (directory.isDirectory()) {
java.io.FileFilter filterBySize = file -> file.isFile() && file.length() >= MIN_LENGTH;
File[] files = directory.listFiles(filterBySize);
if (files != null) {
for (File file : files) {
System.out.printf("%s KB / %s%n", file.length() / 1024, file);
}
}
}
Цикл можно заменить на streams+лямбду:
Stream.of(files).forEach(file ->
System.out.printf("%s KB / %s\n", file.length() / 1024, file)
);