Java > getResourceAsStreamの使い方
更新日
2011-11-30
広告
リソースファイルの利用方法を紹介します(Java version 1.6.0)。
getResourceAsStreamメソッドを利用すると、リソースファイル(設定ファイルなどのこと)を簡単に読み込むことができます。 以下の説明では、リソースファイルとして app.properties を利用します(参考: java.util.Propertiesの使い方)。 app.propertiesの内容は以下のとおりです。
name=MyApplication
インスタンス経由
app.properties を読み込むサンプル TestApp は以下です。package sweng.sample; import java.io.*; import java.util.*; public class TestApp { // コンストラクタ public TestApp() throws IOException { InputStream is = this.getClass().getResourceAsStream("app.properties"); Properties props = new Properties(); props.load(is); is.close(); System.out.println("value = " + props.getProperty("name")); } public static void main(String[] args) throws IOException { System.out.println("getResourceAsSteam"); TestApp app = new TestApp(); } }コンストラクタの中で app.properties を読み込んでいます。 app.propertiesとTestApp.classは、同じクラスパスの場所に配置する必要があります。 今回は、sweng/sample以下に配置してあります。
GetResourceAsStream$ ls sweng/sample/ TestApp.class app.propertiesTestAppの実行結果は以下のとおりです。
GetResourceAsStream$ java sweng.sample.TestApp getResourceAsString value = MyApplicationTestAppは、コンストラクタの中、つまりクラスのインスタンス(this)経由でリソースファイルを取得しています。
スタティック経由
次のサンプル TestApp2 は、staticなコンテキストからリソースファイルを取得する例です。package sweng.sample; import java.io.*; import java.util.*; public class TestApp2 { // staticメソッド public static void load() throws IOException { InputStream is = TestApp2.class.getResourceAsStream("app.properties"); Properties props = new Properties(); props.load(is); is.close(); System.out.println("value = " + props.getProperty("name")); } public static void main(String[] args) throws IOException { System.out.println("getResourceAsStream static"); TestApp2.load(); } }
loadメソッドはstaticメソッドなので、this変数にアクセスできません。 代わりに TestApp2.class 経由でリソースファイルにアクセスできます。
TestApp2を実行すると、以下の結果になります。 (app.propertiesの配置場所はTestAppの場合と同じです)
GetResourceAsStream$ java sweng.sample.TestApp2 getResourceAsString static value = MyApplication
クラスパス経由
上記の例だと、クラスファイルとapp.propertiesを同じディレクトリに置く必要があります。 以下の例のように、クラスローダーを使うと、クラスパスが通ってるディレクトリのどこにapp.propertiesを置いてもよくなります。package sweng.sample; import java.io.*; import java.util.*; public class TestApp3 { // static method public static void load() throws IOException { InputStream is = TestUtils.class.getClassLoader().getResourceAsStream("app.properties") Properties props = new Properties(); props.load(is); is.close(); System.out.println("value = " + props.getProperty("name")); } public static void main(String[] args) throws IOException { System.out.println("getResourceAsStream static"); TestApp2.load(); } }
広告
お問い合わせは sweng.tips@gmail.com まで。