web-dev-qa-db-ja.com

Java 7の新しいファイルAPIを使用して、パスが既存のファイルを指しているかどうかを確認する方法は?

古い、多かれ少なかれ廃止されたJava.io.File AP​​Iには、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  

もちろん、pathFileに変換し直すこともできますが、もっと良い方法があると思います。

編集:OK、Files.existsを指摘してくださった皆さんに感謝します。 (existsで単純なPathメソッドを使用するよりも)複雑になった理由を誰かが知っていますか?

34
soc

Filesクラスを使用します。

Files.exists(path);

編集:あなたの後続の質問に答えるために、私はメソッドが別のクラスにある理由は、Pathがインターフェイスであり、実装を提供したかったためだと思います(Collectionsクラスの代わりにListインターフェースを使用します)。

質問には直接関係していませんが、ラチェットフリークに従って、シンボリックリンクの処理方法を決定するオプションのvarags引数もメソッドにあります。

ここからOracleのJavadocを読んでください

58
OpenSauce

ユーティリティクラス Files でパッケージを探します。

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

新しいファイルシステムAPIでは、すべてのファイル操作はFilesクラスによって定義されます。ほとんどの場合、これらの操作は他の操作に関して実装されるか、適切なファイルシステムプロバイダーに委任されます。一方、Pathインターフェースは、パス操作が定義される場所です。パスは、ファイルを見つけるために使用されるオブジェクトです。ファイルに対して操作を行う場合は、適切なFilesメソッドを呼び出して、ファイルを見つけるためのパスを指定します。

2
Alan

そのための新しいメソッドを追加する必要はありません。Path.toFile()を使用してファイルを取得し、その上でexistsを実行します。

0
Femi