【Java】FileとPath(+Files)

FileクラスとPathインタフェース(+Filesクラス)のどちらを使えばよいのか

 

ttkcd.hatenablog.com

に書いたように、PathはFileで可能な操作は基本的に可能

はじめに、似たような機能を持つのにそもそもパッケージが異なる
Fileクラスがjava.ioなのに対して、Pathインタフェースはjava.nio.file
nはnewで、PathインタフェースはJava7で追加されたもの。つまり、Oracleはすでにある機能を改めて新しいAPIを作成した

結論

いかに主な違いを記載するが、基本的に新規のシステムではPathとFilesを使用したほうがよさそう
おそらく、Pathが追加されるタイミングで、FileクラスのtoPath()が追加された。
違い1(エラー処理)
それぞれを使用してファイルを削除する場合を考える。
var file = new File("");
var path = Paths.get("");
boolean isDeleted = file.delete(); // ①
Files.delete(path); // ②
上記のコードの場合、①は削除できたか否かを返すが、②はコンパイルエラー(IOExceptionの処理が必要)が発生する。
つまり、削除を試みたが削除できなかった原因がわかる。
違い2(メタデータ
ファイルには許可・所有者などのメタデータが含まれているが、Fileクラスはサポートされていない。Pathはサポートしている
例)ファイルの所有者:Files.getOwner(Path path, LinkOption... options)
違い3(パフォーマンス)
FileはPathに比べるとパフォーマンスが悪くなる場合がある。
例)ディレクトリに多数のファイルがあった場合