9
votes

Files.Size () Mise en œuvre en Java 7

Y a-t-il une différence de mise en œuvre entre fichier.length () et fichiers.size () en java? Java 7 introduit fichiers.Size () méthode.


0 commentaires

3 Réponses :


20
votes

La principale différence est que fichiers.Size () peut gérer des objets qui ne sont pas des" fichiers réguliers "(tels que définis par fichiers.isregularfile () ).

Cela signifie que, selon lequel FileSystemProviders < / Code> Vous avez disponible, il pourrait être en mesure d'obtenir la taille d'un fichier dans un fichier zip, il pourrait être capable de gérer des fichiers accessibles via FTP / SFTP, ...

Ancien simple fichier.length ( ) ne peut en faire aucun de cela. Il SEULEMENT Poignez les fichiers "réels" (c'est-à-dire ceux que le système d'exploitation sous-jacent traite aussi des fichiers).


0 commentaires

6
votes

Le java.nio.file.files classe dans JDK 7 est une classe qui fournit des méthodes statiques qui fonctionnent sur des fichiers.

the fichiers.size (Chemin de chaîne) La méthode renvoie la taille du fichier à partir du java.nio.file.spi.filesystemprovider . Ce n'est pas rien à voir avec fichier.length () car cela vous renvoie la taille du fichier réelle qui a réellement "connecté" à.


1 commentaires

Selon les docs Files.Size (chemin de chemin) fait renvoie la "taille du fichier réelle": renvoie la taille d'un fichier (en octets). La taille peut différer de la taille réelle sur le système de fichiers en raison de la compression, de la prise en charge des fichiers clairsemés ou d'autres raisons.



2
votes

Une différence importante est que fichiers.size.size.Size () jette une exception ioexception si quelque chose ne va pas, tandis que fichier.length () retourne simplement 0. Je recommanderais donc d'utiliser Files.Size () Parce:

  • Il n'est pas possible de différencier un fichier vide et une erreur survenant avec fichier.length () car il retournera 0 dans les deux cas.
  • Si une erreur se produit, vous n'obtiendrez aucune information sur la cause de l'erreur avec fichier.length () . En revanche, la ioexception projetée de fichiers.Size () comprendra généralement un message indiquant la cause de la défaillance.

    En outre, comme décrit dans Cette réponse , fichiers.Size () peut fonctionner avec Tout fournisseur de système de fichiers (par exemple pour les systèmes de fichiers ZIP ou FTP) tandis que fichier.length () fonctionne uniquement avec le système de fichiers "régulier" exposé par votre système d'exploitation.

    Conclusion: En général, préférez les méthodes à partir des fichiers de la classe sur le fichier Legacy classe.


0 commentaires