Wie lässt sich die Größe einer Datei ermitteln?

Die Größe einer Datei lässt sich durch Erzeugen eins File-Objektes und den Aufruf der Methode length() ermitteln.

import java.io.File;

public class Dateigroesse {

    public static void main(String[] args) {
        File f = new File("test.jpg");
        double fileSize = f.length() / 1024d;
        System.out.println(fileSize + "kb");
    }
}

Verzeichnisgröße ermitteln

Möchte man die Größe eines Verzeichnisses ermitteln, so muss der Inhalt gelistet, die Größen der enthaltenen Dateien berechnet und anschließend summiert werden. Da in einem Verzeichnis weitere Verzeichnisse enthalten sein können, muss der Durchlauf rekursiv erfolgen.

import java.io.File;

public class Dateigroesse {

    public static void main(String[] args) {
        String dirName = "/Users/joecze/Downloads";
        File dir = new File(dirName);
        if(!dir.exists()) {
            System.err.println(dir + " existiert nicht! - Abbruch");
            return;
        }
        long fileSize = readDir(dir, 0);
        System.out.println(fileSize / 1024d + "kb");
    }

    private static long calculateFileSize(File f) {
        if (!f.exists()) {
            return 0;
        }
        return f.length();
    }
    
    private static long readDir(File dir, long l) {
        System.out.println("reading directory " + dir.toString());
        File[] files = dir.listFiles();
        for(File f : files) {
            if(f.isDirectory()) {
                readDir(f, l);
            }else{
                long fSize = calculateFileSize(f);
                System.out.println("\t" + f.toString() + " -> " + fSize);
                l += fSize;
            }
        }
        return l;
    }
}

Das Beispielprogramm weist neben main() zwei Methoden auf: long calculateFileSize(File f) berechnet die Größe eines übergebenen File-Objektes und long readDir(File dir, long l). Die Methode erhält als Parameter ein Verzeichnis als File-Objekt und den Wert 0 als initiale Verzeichnisgröße übergeben und gibt die aufsummerte Gesamtgröße des Verzeichnisinhaltes zurück.

Die erstgenannte Methode ist sehr simpel. Nach Prüfung der Dateiexistenz wird mittels File#length() deren Größe zurückgegeben. Existiert die Datei nicht, so liefert die Methode 0.

Die zweite Methode ist etwas komplexer. Sie arbeitet rekursiv und enthält zur besseren Nachverfolgung der Arbeitsweise zusätzlich einige Ausgabeanweisungen.
In ihr wird durch die Methode listFiles() ein Array von File-Objekten des übergebenen Verzeichnisses erstellt. Dieses Array wird anschließend in einer Schleife durchlaufen. Jedes File-Objekt wird darauf hin untersucht, ob es sich um ein Verzeichnis handelt. Ist dies der Fall, so wird die Methode erneut mit diesem Objekt als Parameter aufgerufen, sodass die Untersuchung eine Stufe im Verzeichnisbaum tiefer fortgeführt wird. Beim rekursiven Aufruf von readDir() wird neben dem File-Objekt noch die bislang ermittelte Gesamtgröße weitergereicht, damit im folgenden Durchlauf die Aufsummierung der Größen weiter fortgesetzt werden kann.
Handelt es sich bei dem untersuchten Objekt nicht um ein Verzeichnis, so kann es nur eine Datei sein. Deren Größe wird durch die erste Methode ermittelt und zur Variablen der Gesamtgröße hinzuaddiert.
Nach erfolgter Abarbeitung des Datei-Arrays wird die Gesamtgröße des Verzeichnisinhalts zurückgegeben.

In main() wird mittels des absoluten Pfades des zu untersuchenden Verzeichnisses ein File-Objekt erzeugt. Nach einer Prüfung wird die Größe ermittelt und zur besseren Lesbarkeit in KB ausgegeben. Auf eine weitergehende Formatierung wird hier verzichtet, um das Beispiel nicht unnötig zu verkomplizieren.
Bei Interesse sei auf den Artikel Dezimalzahl formatieren verwiesen.

Wenn Ihnen javabeginners.de gefällt, freue ich mich über eine Spende an diese gemeinnützigen Organisationen.