Java java.nio.file.Files size() Methode

Java File Java java.nio.file.Files


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

public static long size(Path path) throws IOException

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ß werdenInteger.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.nio.file.*;
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

// Für Dateien, die möglicherweise sehr groß sind, sollten Sie ein benutzerfreundlicheres Anzeigeformat in Betracht ziehen
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

  1. Leistungsüberlegungen:

    • Für lokale Dateisysteme,size()ist der Vorgang normalerweise schnell
    • Bei Netzwerkdateisystemen kann es zu Latenz kommen
  2. Symbolische Links:

    • Wenn der Pfad ein symbolischer Link ist, wird die Größe der tatsächlichen Datei zurückgegeben, auf die der Link zeigt
  3. Dateisperrung:

    • Die Methode sperrt die Datei während der Ausführung nicht, daher kann sich die Dateigröße unmittelbar nach dem Abrufen ändern
  4. Alternativen:

    • Für ältere Java-Versionen können Siejava.io.File.length()

Praktische Anwendungsszenarien

Prüfung vor dem Datei-Upload:

Beispiel

// Prüfen, ob die Datei die zulässige Größe überschreitet
if (Files.size(filePath) > MAX_UPLOAD_SIZE) {
    throw new FileTooLargeException();
}

Speicherplatzverwaltung:

Beispiel

// Gesamtgröße aller Dateien in einem Verzeichnis berechnen
long totalSize = Files.walk(dirPath)
                    .filter(Files::isRegularFile)
                    .mapToLong(Files::size)
                    .sum();

Fortschrittsanzeige:

Beispiel

// Fortschritt beim Kopieren von Dateien anzeigen
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 File Java java.nio.file.Files

Andere Erweiterungen