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
)?
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
regardez dans la classe utilitaire Files pour le paquet:
Files.exists(Path path,LinkOption... options)
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.
Pas besoin d'ajouter une nouvelle méthode pour cela: utilisez Path.toFile()
pour obtenir un fichier, puis exécutez exists
dessus.