2015年1月7日水曜日

java.lang.ClassクラスのgetResourceメソッド

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

0 件のコメント: