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);
}