Javaのリソースデータ (1)

Javaのリソースデータに関連する事柄を、何回かに分けてメモします。この記事は個人的なメモです。
今回は、リソースデータの取得に使うメソッドの使用法について書きます。
前回: -
次回: id:simply-k:20100719:1279499319
目次: id:simply-k:20100728:1280299110

リソースデータの取得によく使うクラスとメソッド
クラス メソッド 戻り値
Class getResource(String name) URL
Class getResourceAsStream(String name) InputStream
ClassLoader getResource(String name) URL
ClassLoader getResourceAsStream(String name) InputStream
リソース名の指定方法 (Classクラスのメソッドを使う場合)
  • 条件
    • Classクラスは「jp.co.foo」パッケージのクラス「Hoge」のクラスリテラル
      (jp.co.foo.Hoge.class)
    • リソースデータは、「jp.co.foo.bar」パッケージの「resource.txt」
  • リソース名の指定方法
    • /jp/co/foo/bar/resource.txt (絶対指定)
    • bar/resource.txt (相対指定)
  • 備考
    • 相対指定では、先頭に「./」を付けてはいけない。
      (Jarファイル化した場合にエラーとなるため。)
    • 内部的に、ClassLoaderクラスのメソッドが呼ばれる。
      その際、リソース名は「jp/co/foo/bar/resource.txt」のように変換される。
    • クラスローダは必ずしもシステムクラスローダとは限らないので注意する。
リソース名の指定方法 (ClassLoaderクラスのメソッドを使う場合)
  • 条件
    • Classクラスの場合と同じ
  • リソース名の指定方法
    • jp/co/foo/bar/resource.txt
  • 備考
    • リソース名の先頭に「/」を付けてはいけない。
    • 相対指定はできない。
    • クラスローダは必ずしもシステムクラスローダとは限らないので注意する。
URLオブジェクトからInputStreamオブジェクトを取得する手順
URL url = loader.getResource(resourceName);
URLConnection connection = url.openConnection();
InputStream is = connection.getInputStream();
InputStreamオブジェクトからデータを取得する例
//プロパティファイル(通常)の場合
InputStream is = Hoge.class.getResourceAsStream(resourceName);
Properties props = new Properties();
props.load(is);
//プロパティファイル(XML)の場合
InputStream is = Hoge.class.getResourceAsStream(resourceName);
Properties props = new Properties();
props.loadFromXML(is);
//テキストファイルの場合
InputStream is = Hoge.class.getResourceAsStream(resourceName);
BufferedReader reader = new BufferedReader(new InputStreamReader(is, "UTF-8"));

String line;
while((line = reader.readLine()) != null){
    ...
}
URLオブジェクトからデータを取得する例
//画像ファイルの場合 (java.awt.Toolkitを使う)
URL url = Hoge.class.getResource(resourceName);
Image img = Toolkit.getDefaultToolkit().getImage(url);


前回: -
次回: id:simply-k:20100719:1279499319
目次: id:simply-k:20100728:1280299110