Méthode size() de java.nio.file.Files en Java

Java File Java java.nio.file.Files


java.nio.file.Files.size()est une méthode statique très pratique du package Java NIO (New I/O), utilisée pour obtenir la taille d'un fichier spécifié (en octets). Cette méthode appartient aujava.nio.filepackage, et fait partie de l'API d'opérations sur les fichiers introduite dans Java 7.

Définition de méthode

public static long size(Path path) throws IOException

Paramètres de méthode

Path path

  • Type: java.nio.file.Path
  • Description: L'objet de chemin de fichier dont la taille doit être obtenue
  • Remarque:
    • Doit pointer vers un fichier existant réellement
    • Ne peut pas être un répertoire (sinon une exception sera levée)
    • Le chemin peut être un chemin absolu ou un chemin relatif

Valeur de retour

type long

  • Signification: Renvoie la taille du fichier, en octets
  • Caractéristiques:
    • Si le fichier est vide, renvoie 0
    • Pour les fichiers volumineux, la valeur de retour peut dépasserInteger.MAX_VALUE

Gestion des exceptions

size()La méthode peut lever les exceptions suivantes :

IOException

  • Conditions de déclenchement:
    • Le fichier n'existe pas
    • Aucune autorisation de lire le fichier
    • Une erreur d'entrée/sortie se produit
    • Le chemin pointe vers un répertoire plutôt qu'un fichier

SecurityException

  • Condition de déclenchement: Lorsqu'un gestionnaire de sécurité existe et refuse l'accès au fichier

Exemples d'utilisation

Utilisation de base

Exemple

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("Taille du fichier : " + fileSize + " octets");
        } catch (IOException e) {
            System.err.println("Erreur lors de l'obtention de la taille du fichier : " + e.getMessage());
        }
    }
}

Gestion des fichiers volumineux

Exemple

// Pour les fichiers qui peuvent être très volumineux, envisagez d'utiliser un format d'affichage plus convivial
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);
}

Notes

  1. Considérations de performance:

    • Pour les systèmes de fichiers locaux,size()l'opération est généralement rapide
    • Pour les systèmes de fichiers réseau, il peut y avoir de la latence
  2. Liens symboliques:

    • Si le chemin est un lien symbolique, la taille du fichier réel pointé par le lien est renvoyée
  3. Verrouillage de fichier:

    • La méthode ne verrouille pas le fichier pendant l'exécution, de sorte que la taille du fichier peut changer immédiatement après avoir été obtenue
  4. Alternatives:

    • Pour les anciennes versions de Java, vous pouvez utiliserjava.io.File.length()

Scénarios d'application pratiques

Vérification avant le téléversement de fichier:

Exemple

// Vérifier si le fichier dépasse la taille autorisée
if (Files.size(filePath) > MAX_UPLOAD_SIZE) {
    throw new FileTooLargeException();
}

Gestion de l'espace disque:

Exemple

// Calculer la taille totale de tous les fichiers dans un répertoire
long totalSize = Files.walk(dirPath)
                    .filter(Files::isRegularFile)
                    .mapToLong(Files::size)
                    .sum();

Affichage de la progression:

Exemple

// Afficher la progression de la copie de fichier
long totalBytes = Files.size(sourcePath);
long copiedBytes = 0;
// ...Mettre à jour et afficher le pourcentage de progression dans la boucle de copie...

Questions fréquentes

Q1 : La méthode size() peut-elle être utilisée sur les répertoires ?

Non. Si le chemin pointe vers un répertoire, cela lèveraIOException. Pour obtenir la taille du répertoire, vous devez utiliserFiles.walk()Parcourez le contenu du répertoire et accumulez les tailles de fichiers.

Q2 : Cette méthode bloque-t-elle ?

Pour les systèmes de fichiers locaux, cela ne bloque généralement pas de manière perceptible, mais pour les systèmes de fichiers réseau, il peut y avoir de la latence.

Q3 : Pourquoi le type de retour est-il long au lieu de int ?

Parce que certains fichiers peuvent dépasser 2GB (Integer.MAX_VALUE), l'utilisation de long peut prendre en charge des fichiers très volumineux.

Q4 : Quelle est la différence entre cette méthode et File.length() ?

Files.size()fait partie de l'API NIO.2 et prend en charge des fonctionnalités de système de fichiers plus modernes (telles que les liens symboliques), tandis queFile.length()est une méthode d'E/S traditionnelle.


Résumé

java.nio.file.Files.size()La méthode offre un moyen simple et efficace d'obtenir la taille du fichier et est une méthode utilitaire couramment utilisée dans les opérations sur les fichiers. Comprendre son utilisation et les exceptions potentielles est très important pour écrire du code de traitement de fichiers robuste.

Java File Java java.nio.file.Files

Autres extensions