Java 7で作成された新しいアプリケーションの場合、java.io.File
オブジェクトをこれ以上使用する理由はありますか、それとも非推奨と見なすことができますか?
私はjava.nio.file.Path
できることがすべてできると信じていますjava.io.File
。
Java 7で作成された新しいアプリケーションの場合、java.io.File
オブジェクトをこれ以上使用する理由はありますか、それとも非推奨と見なすことができますか?
私はjava.nio.file.Path
できることがすべてできると信じていますjava.io.File
。
回答:
短い話:
java.io.File
最も可能性が高いだろう決して非推奨しないこと/サポートされていません。そうは言っても、それjava.nio.file.Path
はより近代的なjava.nio.file
libの一部であり、java.io.File
できることはすべて可能ですが、一般的にはより良い方法で行われます。
新しいプロジェクトの場合は、を使用しますPath
。
File
レガシーのオブジェクトが必要な場合は、Path#toFile()を呼び出します。
ファイルからパスへの移行
2009年5月、Janice J. HeissとSharon Zakhourによる、JDK 7のNIO.2ファイルシステムについての記事
File
代わりに使用するのPath
ですか?
Path
で「子を追加する」resolve(...)
または「1つ上のレベルに移動する」getParent()
などのように簡単に変更できますが、File
できません。基本的に、Pathの変更が完了したら、しばしばそれを変換しtoFile()
て、FileInputStream
コンストラクターなどのレガシーメソッドに送信できるようにします。
非推奨と見なすことができますか?
いいえ、Javadoc でそのようにマークされるまで、非推奨と見なすことはできませんFile
。
java.io.File
現在も削除されておらず、廃止もされていません。Javadocには、これらのいずれかが発生することを示唆するものはまだありません。
詳細については、この記事を確認してください-http ://www.oracle.com/technetwork/articles/javase/nio-139333.html
基本的にfile.Pathはこれからの道ですが、広く知られているJavaの人々は後方互換性を保つ傾向があるので、私は彼らがそれを残した理由だと思います。
の非常に良い答えを完成させ@mmcrae
ます。
java.io.Fileオブジェクトをもう使用する理由はありますか、それとも非推奨と見なすことができますか?
JDKクラスが非推奨になることはほとんどありません。JDK 8 APIの非推奨リストで、最初のJDK以降非推奨となったすべてのクラス
を確認できます。
これには、OracleのドキュメントとJavaコミュニティが使用を推奨しないクラスのほんの一部しか含まれていません。、、...それは非常に多くの欠陥を持つクラスは廃止されていないされています。
しかし、なぜ ?
概念的にはある意味がまだ存在しますが、確実に削除されるため、使用しないことをお勧めします。
何千ものプログラムが、これらの不適切に設計されたクラスに依存しています。
そのようなクラスの場合、Java API開発者はそのようなシグナルを出しません。
java.util.Date
java.util.Vector
java.util.Hashtable
deprecated
の答え@EJP
は本当に正しいです:
Javadocでそのようにマークされていない限り、そうでない限りは。
:だから、私はあなたの質問は、その面でより多くの意味になるだろうと思い
、「我々は選択肢を持っているとして、私たちが使用する必要がある、java.io.File
またはjava.nio.file.Path
新しい開発のための答えがある場合java.nio.file.Path
、あなたは簡単の利点を取ることができるjava.io.File
使用して、従来のプロジェクトのためにjava.io.File
?」
java.nio.file.Pathは、java.io.Fileが実行できるすべてのことを実行できると思います。
答えがあります。
レガシーIOに関するこのOracleチュートリアルは、あなたの考えを裏付けています。
Java SE 7リリース以前は、
java.io.File
クラスはファイルI / Oに使用されるメカニズムでしたが、いくつかの欠点がありました。多くのメソッドは、失敗しても例外をスローしなかったため、有用なエラーメッセージを取得できませんでした。たとえば、ファイルの削除が失敗した場合、プログラムは「削除失敗」を受け取りますが、ファイルが存在しないためか、ユーザーに権限がないためか、その他の問題が原因であるかどうかはわかりません。
renameメソッドは、プラットフォーム間で一貫して機能しませんでした。シンボリックリンクに対する実際のサポートはありませんでした。
ファイルのアクセス許可、ファイルの所有者、その他のセキュリティ属性など、メタデータのサポートがさらに必要でした。
ファイルのメタデータへのアクセスは非効率的でした。
Fileメソッドの多くはスケーリングしませんでした。サーバーを介して大きなディレクトリリストを要求すると、ハングする可能性があります。大規模なディレクトリは、メモリリソースの問題を引き起こし、サービス不能を引き起こす可能性もあります。
循環シンボリックリンクがある場合、ファイルツリーを再帰的にウォークして適切に応答できる信頼性の高いコードを作成することはできませんでした。
には多くの欠点があるためjava.io.File
、このクラスを新しい開発に使用する理由はまったくありません。
また、を使用したレガシーコードでもjava.io.File
、Oracleは使用するためのヒントを提供しますPath
。
おそらく、java.io.Fileを使用するレガシーコードがあり、コードへの影響を最小限に抑えてjava.nio.file.Path機能を利用したいと考えています。
java.io.Fileクラスは、次のように、古いスタイルのFileインスタンスをjava.nio.file.Pathインスタンスに変換するtoPathメソッドを提供します。
Path input = file.toPath();
次に、Pathクラスで使用できる豊富な機能セットを利用できます。
たとえば、ファイルを削除するコードがあるとします。
file.delete();
次のように、Files.deleteメソッドを使用するようにこのコードを変更できます。
Path fp = file.toPath();
Files.delete(fp);
はい。ただし、Java7独自の標準APIを含む多くの既存のAPIは、File
タイプでのみ機能します。
Java.io.Fileは非推奨ではありません。はいjava.nio.file.Pathの方が優れていますが、Java.io.Fileを使用するプログラムやテキストブックがまだたくさんある限り、レガシーの理由だけで非推奨と見なすべきではなく、あまりにも重要です。そうすることは、仕事にスパナを投げるだけで、全体の利益を得ることはできません。たとえば、Androidフレームワークは、基本的なファイル処理機能の一部にFileを使用しますが、他の多くのことを行います。
Path
はより良いかどうか尋ねませんでした。彼File
は廃止されたかどうか尋ねた。
Java 7で作成された新しいアプリケーションの場合、java.io.Fileオブジェクトを使用する理由はありますか、それとも非推奨と見なすことができますか?
これは、「ナポレオンがロシアを侵略すべきか、それともこれらのブリュッセルもやしは本当においしいのか」と言うようなものです。
質問の2番目の部分については、実際に非推奨であると考えることができます。2018年1月現在、サポートは終了していません。しかし、そう考えるのを止めることは何もありません。それがあなたにこの人生または次の人生で何らかの利点をもたらすかどうかは、言うことは不可能です。
File
。はい、いいえ、どちらにしますか?」です。
File
とにかく多くの既存のサードパーティAPIがまだとにかく使用しているからです。すぐに死ぬことはありません。
it isn't deprecated. But there's nothing to stop you *considering* it so
笑。