Eclipse で実行可能 jar ファイルにデータファイルを入れる

プログラムから参照するファイル(たとえばテキストファイル)を 実行可能 jar ファイルに一緒に入れる方法.
  1. 実行可能ファイルにデータファイルを入れる
    データファイルはsrcフォルダの下の, Mainクラスのパッケージの直下に置く.

    (べつにパッケージ直下でなくても, サブフォルダーを作ってもよい)
    あとは, Eclipse の Package Explorer -> Export... -> Runnable JAR file で作成.
    jar ファイルの中身はこんな感じ:
    $ jar tvf test.jar
        74 Fri Jul 10 17:30:56 JST 2015 META-INF/MANIFEST.MF
         0 Fri Jul 10 17:30:22 JST 2015 com/
         0 Fri Jul 10 17:30:22 JST 2015 com/test/
         0 Fri Jul 10 17:30:22 JST 2015 com/test/jar/
      1879 Fri Jul 10 17:30:34 JST 2015 com/test/jar/TestJar.class
         9 Fri Jul 10 16:57:10 JST 2015 test.txt
    

  2. プログラムからのアクセスは, ClassLoader.getResourceAsStream(String name) を使って InputStream を得る.
    コード例:
            InputStream i = TestJar.class.getClassLoader().getResourceAsStream("test.txt");
            InputStreamReader r = null;
            BufferedReader b = null;
            try {
                r = new InputStreamReader(i);
                b = new BufferedReader(r);
                String s = b.readLine();
                System.out.println(s);
                b.close();
            } catch(Exception e){
                System.out.println(e);
            }
    
    このコードはmainから直接呼び出すことを想定しているので, ClassLoaderオブジェクトを得るのに
     TestJar.class.getClassLoader()
    
    としているが, (staticでない, 一般の)メソッド中では
     getClass().getClassLoader()
    
    でよかろう.

    2015-07-10