Classpath resources(クラスパスからリソースを読み込むあれこれ。jarの中とか。)
Webではあまり気にしたことのなかったリソースの配置場所なのですが、
スタンドアロンで配布する場合どこに置いてどう読み込むのかと。
(jarに全部固める場合とか、絶対パス指定できないとか)
propertiesファイルをjarの中に入れてしまいたいのです。
で、そういえばSeasarさんは何個かdiconファイルがjarの中にあったなーと思い、色々のぞいてみて
「おぉ、クラスローダーを使うのか」となりました。(ResourceUtilらへんを参照させてもらいました)。
その流れで
http://www.javaworld.com/javaworld/javaqa/2003-08/01-qa-0808-property.html
のステキな表にたどり着いたのでコピっておきます。
Behavioral differences
Method Parameter format Lookup failure behavior Usage example ClassLoader.getResourceAsStream() "/"-separated names; no leading "/" (all names are absolute) Silent (returns null) this.getClass().getClassLoader().getResourceAsStream("some/pkg/resource.properties") Class.getResourceAsStream() "/"-separated names; leading "/" indicates absolute names; all other names are relative to the class's package Silent (returns null) this.getClass().getResourceAsStream("resource.properties") ResourceBundle.getBundle() "."-separated names; all names are absolute; .properties suffix is implied Throws unchecked java.util.MissingResourceException ResourceBundle.getBundle("some.pkg.resource")
- ClassLoader.getResourceAsStream()
- クラスパスの頭から。
- 区切りは「/」で。
- 頭に「/」は入れない。
- Class.getResourceAsStream()
- クラスのある場所から。
- 区切りは「/」で。
- 先頭に「/」を入れたら、クラスパスの頭から。
- ResourceBundle.getBundle()
- クラスパスの頭から。
- 区切りは「.」で。