古い、多かれ少なかれ廃止されたJava.io.File
APIには、exists
がファイルシステム内の既存のメソッドを指している場合にtrueを返すメソッドFile
がありましたが、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
もちろん、path
をFile
に変換し直すこともできますが、もっと良い方法があると思います。
編集:OK、Files.exists
を指摘してくださった皆さんに感謝します。 (exists
で単純なPath
メソッドを使用するよりも)複雑になった理由を誰かが知っていますか?
Files
クラスを使用します。
Files.exists(path);
編集:あなたの後続の質問に答えるために、私はメソッドが別のクラスにある理由は、Path
がインターフェイスであり、実装を提供したかったためだと思います(Collections
クラスの代わりにList
インターフェースを使用します)。
質問には直接関係していませんが、ラチェットフリークに従って、シンボリックリンクの処理方法を決定するオプションのvarags引数もメソッドにあります。
ユーティリティクラス Files でパッケージを探します。
Files.exists(Path path,LinkOption... options)
新しいファイルシステムAPIでは、すべてのファイル操作はFilesクラスによって定義されます。ほとんどの場合、これらの操作は他の操作に関して実装されるか、適切なファイルシステムプロバイダーに委任されます。一方、Pathインターフェースは、パス操作が定義される場所です。パスは、ファイルを見つけるために使用されるオブジェクトです。ファイルに対して操作を行う場合は、適切なFilesメソッドを呼び出して、ファイルを見つけるためのパスを指定します。
そのための新しいメソッドを追加する必要はありません。Path.toFile()
を使用してファイルを取得し、その上でexists
を実行します。