web-dev-qa-db-fra.com

Comment vérifier si un chemin pointe vers un fichier existant avec Java 7?

Les anciens, plus ou moins obsolètes Java.io.File L'API avait une méthode exists qui renvoyait true si le File pointait vers une méthode existante dans le système de fichiers, mais je n'ai trouvé aucune méthode comparable pour Java.nio.file.Path:

scala> import Java.nio.file._
import Java.nio.file._

scala> val path = Paths.get("/foo")
path: Java.nio.file.Path = /foo

scala> path.
asInstanceOf     compareTo        endsWith         getFileName      getFileSystem    getName          getNameCount     
getParent        getRoot          isAbsolute       isInstanceOf     iterator         normalize        register         
relativize       resolve          resolveSibling   startsWith       subpath          toAbsolutePath   toFile           
toRealPath       toString         toUri  

Bien sûr, je pourrais simplement convertir le path en File mais je suppose qu'il y a une meilleure façon de le faire.

Edit: OK, merci à tout le monde de souligner Files.exists. Est-ce que quelqu'un sait pourquoi c'est devenu plus compliqué (que d'avoir une simple méthode exists sur Path)?

34
soc

Utilisez la classe Files:

Files.exists(path);

EDIT: pour répondre à votre question suivante, je pense que la raison pour laquelle la méthode est dans une autre classe est que Path est une interface, et ils voulaient fournir une implémentation (similaire à mettre des méthodes de tri dans le Collections classe au lieu de l'interface List).

Pas directement lié à la question, mais selon le phénomène de cliquet, il existe également un argument varags facultatif pour la méthode, qui détermine comment les liens symboliques sont gérés

Lisez les Javadocs d'Oracle ici .

58
OpenSauce

regardez dans la classe utilitaire Files pour le paquet:

Files.exists(Path path,LinkOption... options)
9
ratchet freak

Dans la nouvelle API du système de fichiers, toutes les opérations sur les fichiers sont définies par la classe Files. Généralement, ces opérations sont implémentées en termes d'autres opérations ou elles sont déléguées au fournisseur de système de fichiers approprié. L'interface Path, d'autre part, est l'endroit où les opérations de chemin sont définies. Un chemin n'est que l'objet utilisé pour localiser un fichier. Si vous souhaitez effectuer des opérations sur un fichier, vous appelez la méthode Files appropriée, en spécifiant le chemin d'accès pour localiser le fichier.

2
Alan

Pas besoin d'ajouter une nouvelle méthode pour cela: utilisez Path.toFile() pour obtenir un fichier, puis exécutez exists dessus.

0
Femi