web-dev-qa-db-ja.com

新しいコードで推奨されるjava.io.FileとJava.nio.Filesの違い

SOに関する回答を書いているときに、ユーザーがそのことを指摘しようとしましたJava.io.Fileは新しいコードでは使用しないでください。代わりに、newオブジェクトJava.nio.Filesを代わりに使用する必要があります。彼は この記事 にリンクしました。

現在、私は数年前からJava=で開発しており、この議論を聞いたことがありません。彼の投稿を読んで以来、私は検索しており、これを確認する他の多くのソースを見つけていません。個人的には、この記事で主張されている点の多くは弱点であり、それらの読み方を知っている場合、Fileクラスによってスローされるエラーは一般に、問題が何であるかを正確に伝えます。

私は継続的に新しいコードを開発しているので、私の質問はこれです:

これは、Javaコミュニティのアクティブな引数ですか? Files は新しいコードに対して File よりも優先されますか?間の主な利点/欠点は何ですか?二つ?

26
Matt Clark

あなたがリンクした documentation が答えを出します:

Java.nio.fileパッケージは、Java仮想マシンがファイル、ファイル属性、およびファイルシステムにアクセスするためのインターフェースとクラスを定義します。このAPIは、Javaの多くの制限を克服するために使用できます。 .io.Fileクラス。toPathメソッドを使用して、Fileオブジェクトで表される抽象パスを使用してファイルを検索するPathを取得できます。結果のPathをFilesクラスで使用して、より効率的で広範なアクセスを提供できます。ファイル操作、ファイル属性、およびI/O例外。ファイルの操作が失敗したときのエラーの診断に役立ちます。

16
Jens

Fileの実装が新しくなりました:Path。ビルダー付きPaths.get("...")。また、Filesには多くのニースユーティリティ関数があり、実装が改善されています(moveは、失敗する場合がある_File.renameTo_の代わりに)。

Pathはファイルシステムを維持します。したがって、Zipファイルシステム( "jar:file:..... .Zip")から別のファイルシステムへのパスをコピーしたり、その逆を行ったりできます。

File.toPath()は段階的な移行に役立ちます。

Filesのユーティリティだけで、新しいクラスへの移行が有利になります。

12
Joop Eggen

どちらも「好ましい」とは言えません。代わりに、アプリケーションに必要な機能を確認し、Java.io.FileまたはJava.nio.Filesのどちらが要件をよりよく満たすかを使用することをお勧めします。

答えはおそらく引き分けであるか、またはJava.nio.Filesの方が優れています。しかし、SOの他のプログラマーではなく、あなたまたはあなたのチームが決定する必要があります。


これはJavaコミュニティの活発な議論ですか?

何かについて議論する人もいます。しかし、私はコミュニティー(一般的に)がより重要な懸念を持っていると思います。

4
Stephen C