TITLE:ClassLoaderでリソースのURLを取得

ClassLoaderでリソースのURLを取得

編集者:Terai Atsuhiro
作成日:2006-05-22
更新日:2021-03-30 (火) 11:07:32

概要

リソースをクラスパス相対パスで指定し、ClassLoaderを使ってURLを取得します。

#screenshot

サンプルコード

URL url = getClass().getClassLoader().getResource("example/test.png");
//URL url = getClass().getResource("test.png");
JLabel icon = new JLabel(new ImageIcon(url));
JLabel path = new JLabel(url.toString());
  • &jnlp;
  • &jar;
  • &zip;

解説

ClassLoaderを使用した場合、クラスパスからの相対パスでリソースを指定することができます。

例えば、.\target\classes\example\test.pngにある画像ファイルのURLを相対パスで取得する場合を考えます。

上記のサンプルを添付のバッチファイルから実行したときのクラスパスは、以下のように設定されています。

java -classpath ".\target\classes" example.MainPanel

ClassLoader#getResourceメソッドを使用する場合は、以下のようにクラスパスからの相対パス(/区切り)を引数にします。

getClass().getClassLoader().getResource("example/test.png");
//getClass().getClassLoader().getResource("./example/test.png");
//だとjar内にパッケージした時うまくいかない。

ClassLoaderからでは無く、Class#getResourceメソッドを使う場合、modified_package_name(このサンプルではパッケージのexampleにあたる)が補完されるので、以下のように指定します。

getClass().getResource("test.png");

どちらを使用しても取得できるURLは同じになります。また、上記のように、相対パスで指定しておけば、ファイルがjar内にあっても、ディレクトリの中にあってもURLを取得することができます。

コメント