Obtener tamaño de un directorio en Java
En ocasiones, estamos trabajando en una aplicación Java, que accede al sistema de archivos y requerimos conocer el espacio ocupado por un directorio, en esta entrada de ¿Cómo se hace? trataremos el tema.
Vamos a colocar los ejemplos de código en diferentes variantes.
Variante 1: Usando Java 8.
// En bytes public static long getDirectorySize(Path path) { long size = 0; // Acá usamos try with resources, de la API 1.7 try (Stream<Path> walk = Files.walk(path)) { size = walk .filter(Files::isRegularFile) .mapToLong(p -> { try { return Files.size(p); } catch (IOException e) { log.error("Error leyendo el tamaño del archivo"); return 0L; } }) .sum(); } catch (IOException e) { log.error("Error en la operación"); } return size; }
Variante 2: Usando Apache Commons IO
Personalmente, me gusta mucho emplear las bibliotecas de Java de Apache Commons, son muy completas y útiles.
Deberíamos de agregar a nuestro pom.xml
<dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> <version>2.8.0</version> </dependency>
Si estas en Android o usando Gradle:
compile "commons-io:commons-io:2.8.0"
La función sería usando esta biblioteca:
public static long getDirectorySize(File dir) { return FileUtils.sizeOfDirectory(dir); }