Java java.nio.file.Files size() Methode
java.nio.file.Files.size()ist eine sehr praktische statische Methode im Java-NIO-Paket (New I/O), mit der die Größe einer angegebenen Datei (in Bytes) ermittelt wird. Diese Methode gehört zumjava.nio.filePaket und ist Teil der in Java 7 eingeführten Dateioperations-API.
Methodendefinition
Methodenparameter
Path path
- Type:
java.nio.file.Path - Beschreibung: Das Dateipfad-Objekt, dessen Größe ermittelt werden soll
- Hinweis:
- Muss auf eine tatsächlich existierende Datei verweisen
- Darf kein Verzeichnis sein (andernfalls wird eine Exception geworfen)
- Der Pfad kann ein absoluter oder ein relativer Pfad sein
Rückgabewert
Typ long
- Bedeutung: Gibt die Größe der Datei in Bytes zurück
- Eigenschaften:
- Wenn die Datei leer ist, gibt sie 0 zurück
- Bei großen Dateien kann der Rückgabewert zu groß werden
Integer.MAX_VALUE
Ausnahmebehandlung
size()Die Methode kann die folgenden Ausnahmen auslösen:
IOException
- Auslösebedingungen:
- Datei existiert nicht
- Keine Berechtigung zum Lesen der Datei
- Ein Eingabe-/Ausgabefehler tritt auf
- Der Pfad verweist auf ein Verzeichnis statt auf eine Datei
SecurityException
- Auslösebedingung: Wenn ein Sicherheitsmanager existiert und den Zugriff auf die Datei verweigert
Anwendungsbeispiele
Grundlegende Verwendung
Beispiel
import java.io.IOException;
public class FileSizeExample {
public static void main(String[] args) {
Path filePath = Paths.get("example.txt");
try {
long fileSize = Files.size(filePath);
System.out.println("Dateigröße: " + fileSize + " bytes");
} catch (IOException e) {
System.err.println("Fehler beim Abrufen der Dateigröße: " + e.getMessage());
}
}
}
Umgang mit großen Dateien
Beispiel
public static String formatFileSize(long size) {
if (size < 1024) return size + " B";
int exp = (int) (Math.log(size) / Math.log(1024));
char unit = "KMGTPE".charAt(exp-1);
return String.format("%.1f %sB", size / Math.pow(1024, exp), unit);
}
Hinweise
Leistungsüberlegungen:
- Für lokale Dateisysteme,
size()ist der Vorgang normalerweise schnell - Bei Netzwerkdateisystemen kann es zu Latenz kommen
- Für lokale Dateisysteme,
Symbolische Links:
- Wenn der Pfad ein symbolischer Link ist, wird die Größe der tatsächlichen Datei zurückgegeben, auf die der Link zeigt
Dateisperrung:
- Die Methode sperrt die Datei während der Ausführung nicht, daher kann sich die Dateigröße unmittelbar nach dem Abrufen ändern
Alternativen:
- Für ältere Java-Versionen können Sie
java.io.File.length()
- Für ältere Java-Versionen können Sie
Praktische Anwendungsszenarien
Prüfung vor dem Datei-Upload:
Beispiel
if (Files.size(filePath) > MAX_UPLOAD_SIZE) {
throw new FileTooLargeException();
}
Speicherplatzverwaltung:
Beispiel
long totalSize = Files.walk(dirPath)
.filter(Files::isRegularFile)
.mapToLong(Files::size)
.sum();
Fortschrittsanzeige:
Beispiel
long totalBytes = Files.size(sourcePath);
long copiedBytes = 0;
// ...Fortschrittsprozentsatz in der Kopierschleife aktualisieren und anzeigen...
Häufig gestellte Fragen
F1: Kann die Methode size() auf Verzeichnisse angewendet werden?
Nein. Wenn der Pfad auf ein Verzeichnis verweist, wird eine Ausnahme ausgelöstIOException. Um die Verzeichnisgröße zu erhalten, müssen SieFiles.walk()den Verzeichnisinhalt durchlaufen und Dateigrößen akkumulieren.
F2: Blockiert diese Methode?
Bei lokalen Dateisystemen blockiert es normalerweise nicht spürbar, aber bei Netzwerkdateisystemen kann es zu Verzögerungen kommen.
F3: Warum ist der Rückgabetyp long statt int?
Weil einige Dateien 2GB überschreiten können (Integer.MAX_VALUE), mit long können sehr große Dateien unterstützt werden.
F4: Was ist der Unterschied zwischen dieser Methode und File.length()?
Files.size()ist Teil der NIO.2-API und unterstützt modernere Dateisystemfunktionen (wie symbolische Links), währendFile.length()ist eine Methode der traditionellen E/A.
Zusammenfassung
java.nio.file.Files.size()Die Methode bietet eine einfache und effektive Möglichkeit, die Dateigröße zu ermitteln, und ist eine häufig verwendete Hilfsmethode bei Dateioperationen. Das Verständnis ihrer Verwendung und möglicher Ausnahmen ist sehr wichtig für das Schreiben von robustem Code zur Dateiverarbeitung.
Java java.nio.file.Files