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.