Méthode size() de java.nio.file.Files en Java
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
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épasser
Integer.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.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
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
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
- Pour les systèmes de fichiers locaux,
Liens symboliques:
- Si le chemin est un lien symbolique, la taille du fichier réel pointé par le lien est renvoyée
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
Alternatives:
- Pour les anciennes versions de Java, vous pouvez utiliser
java.io.File.length()
- Pour les anciennes versions de Java, vous pouvez utiliser
Scénarios d'application pratiques
Vérification avant le téléversement de fichier:
Exemple
if (Files.size(filePath) > MAX_UPLOAD_SIZE) {
throw new FileTooLargeException();
}
Gestion de l'espace disque:
Exemple
long totalSize = Files.walk(dirPath)
.filter(Files::isRegularFile)
.mapToLong(Files::size)
.sum();
Affichage de la progression:
Exemple
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 java.nio.file.Files