В Java мы можем использовать Files.size
чтобы получить размер файла; для размера каталога или папки нам нужно рекурсивно посчитать размер каталога (сумма Files.size
всех файлов).
В этом примере показано несколько распространенных способов определения размера каталога или папки.
Файловый посетитель
(Java 7)Файлы.прогулка
( Java 8)Каталог файлов.Размер
(Общий ввод-вывод Apache)- Сумма
файл.длина
всех файлов. (Устаревший ввод-вывод)
1. Размер каталога – Файловый редактор (Java 7)
В этом примере используется FileVisitor
для просмотра всех файлов по указанному пути и суммирования размера всех файлов.
// size of directory in bytes public static long getDirectorySizeJava7(Path path) { AtomicLong size = new AtomicLong(0); try { Files.walkFileTree(path, new SimpleFileVisitor<>() { @Override public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) { // sum size of all visit file size.addAndGet(attrs.size()); return FileVisitResult.CONTINUE; } @Override public FileVisitResult visitFileFailed(Path file, IOException e) { System.out.printf("Failed to get size of %s%n%s", file, e); return FileVisitResult.CONTINUE; } }); } catch (IOException e) { System.out.printf("%s", e); } return size.get(); }
2. Размер каталога – Файлы.прогулка (Java 8)
В этом примере используются файлы Java 8 .прогулка
и Поток
для рекурсивного обхода каталога и суммирования размера всех файлов.
// size of directory in bytes public static long getDirectorySizeJava8(Path path) { long size = 0; // need close Files.walk try (Streamwalk = Files.walk(path)) { size = walk //.peek(System.out::println) // debug .filter(Files::isRegularFile) .mapToLong(p -> { // ugly, can pretty it with an extract method try { return Files.size(p); } catch (IOException e) { System.out.printf("Failed to get size of %s%n%s", p, e); return 0L; } }) .sum(); } catch (IOException e) { System.out.printf("IO errors %s", e); } return size; }
3. Размер каталога – Имена файлов (общий ввод-вывод Apache)
В этом примере используется общий ввод-вывод Apache FileUtils.sizeofdirectory
для получения размера каталога.
commons-io commons-io 2.7
public static long getDirectorySizeCommonIO(File dir) { return FileUtils.sizeOfDirectory(dir); }
4. Унаследованный IO
В устаревшем IO мы можем использовать file.listFiles()
для рекурсивного обхода каталога и file.длина()
для суммирования размера всех файлов.
public static long getDirectorySizeLegacy(File dir) { long length = 0; File[] files = dir.listFiles(); if (files != null) { for (File file : files) { if (file.isFile()) length += file.length(); else length += getDirectorySizeLegacy(file); } } return length; }
Скачать Исходный Код
$клон git $клон git
$cd java-ввод-вывод
Рекомендации
Оригинал: “https://mkyong.com/java/how-to-get-size-of-a-directory-in-java/”