java.lang.ClassクラスのgetResourceメソッドについてメモしておきます(裏はとってないので,あくまで自分の推測です).
java.lang.Class#getResourceがリソースを探索する際の起点は,CLASSPATHに指定されたパスになる.
例えば,「HogeHoge.class」というプログラムと「hogehoge.txt」というファイルが,次のように配置されている場合,
/tmp/bin/HogeHoge.class
/tmp/etc/hogehoge.txt
「HogeHoge.class.getResource("hogehoge.txt")」が「hogehoge.txt」のURLを返すためには,
java -cp "/tmp/bin:/tmp/etc" HogeHoge
というように「hogehoge.txt」が置かれたディレクトリのパスをCLASSPATHに指定してプログラムを実行する必要あります.
ちなみに,HogeHogeクラスのソースは以下のとおりです.
import java.net.URL;
public class HogeHoge {
public static void main(String[] args) {
URL url = HogeHoge.class.getResource("hogehoge.txt");
System.out.println(url);
}
}
また,HogeHogeクラスがhogehogeパッケージのクラスの場合,つまり,ソースが次の場合,
package hogehoge;
import java.net.URL;
public class HogeHoge {
public static void main(String[] args) {
URL url = HogeHoge.class.getResource("hogehoge.txt");
System.out.println(url);
}
}
ファイル構成は次のようになり,
/tmp/bin/hogehoge/HogeHoge.class
/tmp/etc/hogehoge/hogehoge.txt
コマンドは次のようになります.
java -cp "/tmp/bin:/tmp/etc" hogehoge.HogeHoge