web-dev-qa-db-fra.com

java.io.File vs Java.nio.Files qui est préféré dans le nouveau code?

Lors de l'écriture de réponses autour de SO, un utilisateur a tenté de souligner que Java.io.File ne doit pas être utilisé dans le nouveau code, mais il fait valoir que le nouvel objet Java.nio.Files devrait être utilisé à la place; il a lié à cet article .

Maintenant, je développe en Java depuis plusieurs années maintenant, et je n'ai jamais entendu cet argument auparavant; depuis la lecture de son article, j'ai cherché, et je n'ai pas trouvé beaucoup d'autres sources qui le confirment, et personnellement, j'ai l'impression que beaucoup des points discutés dans l'article sont faibles et que si vous savez les lire, les erreurs lancées par la classe File généralement vous dire exactement quel est le problème.

Comme je développe continuellement de nouveaux codes, ma question est la suivante:

Est-ce un argument actif dans la communauté Java? Est-ce que Files est préféré à File pour le nouveau code? Quels sont les principaux avantages/inconvénients entre les deux?

26
Matt Clark

La documentation que vous avez liée donne la réponse:

Le package Java.nio.file définit des interfaces et des classes pour la machine virtuelle Java pour accéder aux fichiers, aux attributs de fichier et aux systèmes de fichiers. Cette API peut être utilisée pour surmonter de nombreuses limitations de Java Classe .io.File. La méthode toPath peut être utilisée pour obtenir un chemin qui utilise le chemin abstrait représenté par un objet File pour localiser un fichier. Le chemin résultant peut être utilisé avec la classe Files pour fournir un accès plus efficace et étendu à des informations supplémentaires. opérations de fichier, attributs de fichier et exceptions d'E/S pour aider à diagnostiquer les erreurs lorsqu'une opération sur un fichier échoue.

16
Jens

File a une implémentation plus récente: Path. Avec un générateur Paths.get("..."). Et Files possède de nombreuses fonctions utilitaires Nice avec de meilleures implémentations aussi (move au lieu du File.renameTo Parfois défaillant).

Un Path maintient son système de fichiers. Par conséquent, vous pouvez copier à partir d'un système de fichiers Zip ("jar: file: ..... .Zip") un chemin vers un autre système de fichiers et vice versa.

File.toPath() peut aider à une transition incrémentielle.

Les utilitaires seuls dans Files rendent rentable le passage aux nouvelles classes.

12
Joop Eggen

Je dirais que ni l'un ni l'autre n'est "préféré". Au lieu de cela, je vous recommande d'examiner les fonctionnalités requises par votre application et d'utiliser laquelle des Java.io.File ou Java.nio.Files répond mieux aux exigences.

La réponse est probablement soit un match nul, soit Java.nio.Files est mieux. Mais c'est à vous ou à votre équipe de décider, pas à un autre programmeur sur SO.


Est-ce un argument actif dans la communauté Java?

Il y a des gens qui discuteront de n'importe quoi. Mais je dirais que la communauté (en général) a des préoccupations plus importantes.

4
Stephen C