[解決済み] Class.getResource()とClassLoader.getResource()の違いは何ですか?
質問
とはどう違うのでしょうか?
Class.getResource()
と
ClassLoader.getResource()
?
edit: 特に知りたいのは、ファイルやディレクトリのレベルでキャッシュが行われているかどうかです。クラスバージョンではディレクトリのリストはキャッシュされるのでしょうか?
AFAIK 以下は本質的に同じことをするはずですが、そうではありません。
getClass().getResource()
getClass().getClassLoader().getResource()
に新しいファイルを作成するレポート生成コードをいじっているときに、このことを発見しました。
WEB-INF/classes/
そのディレクトリにある既存のファイルから クラスからのメソッドを使用すると、デプロイ時にあったファイルを
getClass().getResource()
しかし、新しく作成されたファイルを取得しようとすると、null オブジェクトが返されました。ディレクトリをブラウズすると、新しいファイルがあることは明らかです。ファイル名は "/myFile.txt" のようにフォワードスラッシュが先頭に付いていました。
は
ClassLoader
のバージョンです。
getResource()
一方、生成されたファイルは見つかりました。この経験から、ディレクトリ一覧のキャッシュが行われているようです。もしそうなら、このことはどこで文書化されているのでしょうか?
から
API ドキュメント
について
Class.getResource()
リソースの検索 を指定します。のルールは に関連するリソースを検索します。 与えられたクラスが実装されています。 そのクラスのクラスローダーを定義する。 このメソッドは、このオブジェクトの クラスローダーがあります。このオブジェクトが ブートストラップクラスローダによってロードされます。 に委譲されます。 ClassLoader.getSystemResource(java.lang.String)。
私には、これは "Class.getResource は実際には自身のクラスローダーの getResource()" を呼び出している、と読めます。これは
getClass().getClassLoader().getResource()
. しかし、明らかに違うのです。どなたか、この件に関して何かヒントを与えていただけないでしょうか?
解決方法は?
キャッシュが行われているかどうかの質問にお答えします。
この点について、getResourceAsStream ClassLoaderメソッドを使ってディスクからファイルを連続的に読み込むスタンドアロンJavaアプリケーションを実行してさらに調査してみました。ファイルを編集すると、その変更はすぐに反映されました。つまり、ファイルはキャッシュされずにディスクから再読み込みされました。
しかし 私は、いくつかのmavenモジュールとWebプロジェクトが互いに依存し合っているプロジェクトに取り組んでいます。私は、Webプロジェクトをコンパイルして実行するために、IDEとしてIntelliJを使用しています。
私は、上記のことはもう成り立たないようだと気づきました。理由は、私が読み込まれていたファイルがjarに焼かれて、依存するウェブプロジェクトにデプロイされるようになったからです。このことに気づいたのは、ターゲットフォルダ内のファイルを変更しようとした後だったのですが、無駄でした。このため、キャッシュが行われているように見えました。
関連
-
[解決済み】Javaで無限大を実装する方法とは?
-
[解決済み] JavaにおけるHashMapとHashtableの違いは何ですか?
-
[解決済み] Javaにおけるpublic、protected、package-private、privateの違いは何ですか?
-
[解決済み] serialVersionUIDとは何ですか、またなぜそれを使用する必要がありますか?
-
[解決済み] リフレクションとは何か、なぜ有用なのか?
-
[解決済み] StringBuilderとStringBufferの違いについて
-
[解決済み] wait()とsleep()の違いについて
-
[解決済み] Javaクラスにおけるcanonical name、simple name、class nameの違いは何ですか?
-
[解決済み] JDKとJREの違いは何ですか?
-
[解決済み】JSF、Servlet、JSPの違いは何ですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] java.sql.SQLException: ユーザー 'root'@'localhost' (using password: YES) のためのアクセスが拒否されました。
-
[解決済み】imageio.IIOException: 入力ファイルが読み込めない
-
[解決済み】JLabelのテキストを中央に配置するには?
-
[解決済み】Javaでユーザー入力を待機させる方法
-
[解決済み】破損したjarファイル
-
[解決済み】Java Error "Exception in thread "main" java.util.InputMismatchException" Array プログラムで発生。
-
[解決済み] エラー - trustAnchors パラメータは空であってはなりません。
-
[解決済み】Javaの".class expected "について
-
[解決済み] "java.nio.charset.MalformedInputException" を避けるために、すべての包括的なCharset。入力の長さ= 1"?
-
[解決済み】InputStreamとしてファイルを読み込むさまざまな方法