2016-06-27 5 views
0
InputStream inputStream = new FileInputStream(new File(this.getClass().getResource("/example.txt").getFile())) 

この方法では、 "/.../.../...jar!/example.txt(そのようなファイルまたはディレクトリはありません)"のようなエラーが発生します。getResource経由でjarにパッケージ化されたファイルのファイル入力ストリームを開くのはなぜですか?

InputStream inputStream = getClass().getResourceAsStream("/example.txt") 

このメソッドは正しく実行されます。

この2つの方法の違いは何ですか?なぜ最初の方法がうまくいかないのですか?

+1

このリンクを確認してください。http://stackoverflow.com/questions/14089146/file-loading-by-getclass-getresource多分これがあなたを助けるでしょう。 – CrazyJavaLearner

+1

良い答え。それが私のパズルを解決しました。ありがとうございました。 – formath

+0

"あなたのアプリケーションをjarファイルにパッケージ化したり、ネットワーク経由でクラスを読み込んだら、アプリケーションは動作しません。私はこれがうまくいかないことを知っていますが、なぜ働かないのかまだ分かりません。もっと説明できますか? @ダラニ – formath

答えて

0

getResourcesは、アプリケーションリソースを返します。これらは基本的にコンパイル時にアプリケーションに存在し、アプリケーションにバンドルされているリソースです。これらのリソースは読み取り専用です。それらを変更するには、それらを別の場所にコピーする必要があります(アプリケーションのプライベートドキュメントディレクトリにあることが望ましい)。

getResourceAsStreamは、任意のリソースの入力ストリームを提供します。これはあなたのアプリケーションバンドルされたリソース(上で説明した)であるか、動的に作成することができます。 getResourceAsStreamを使用するには、特定のリソースにアクセスできる必要があります。

関連する問題