【Applet】【Java】jar 内のリソースを取得する 
2014/06/11 Wed [edit]
前回の続き。
関数内で使っている getJarFileURL() は前回の関数をそのまま使う。
//ファイルパスから jar 内のリソース URL を作成する
public static final String toJarURL(String fileName, Object context) {
final URL url = getJarFileURL(context); //jar の url を取得
if (url == null) {
return null; //失敗
}
return "jar:" + url.toString() + "!/" + fileName; //JAR URL 構文にするだけ
}
//メインでは
String resFilePath = "res/data/sample.txt";
String jarUrl = toJarURL(resFilePath , this);
System.out.println("jarUrl = " + jarUrl);
//入力ストリームを開く
URL url = new URL(jarUrl);
InputStream is = url.openConnection().getInputStream();
・・・(以下略=リソースごとの読み込み処理)・・・
引数 context は jar 内の .class なら何でも良いが、起動した Applet が分かり易い。Android ではリソース読み込みに Context を引数によく使うので、名前を合わせただけ。
また、jar 内のファイル構成によっては、この関数を使う必要はない。例えば起動クラスがルートにある場合は、ClassLoader の getResource() を使えばリソースを読み込める。しかしどうやら getResource() は起動クラスから、同・下位階層しか上手く取得できないらしい。Android のようにパッケージ名などで、深い階層に起動クラスがあるときには、この getJarFileURL(), toJarURL() を利用した方が良いだろう。このJAR URL は絶対パスみたいなものなので、リソースがどこにあっても読み込めるという利点がある。
(参考) JAR URL 構文
■Android の起動クラスとリソース配置関係
com/example/text/MainActivity.class ←起動クラス
res/drawable-XXX/~ ←リソース(Context.getResources() で読める)
assets/~ ←リソース(AssetManager で読める)
■Applet の起動クラスとリソース配置関係(起動クラスがルート)
MainApplet.class ←起動クラス(ここなら ClassLoader.getResource() で読める)
res/~ ←リソース(ルートでも良い)
■Applet の起動クラスとリソース配置関係(起動クラスが深い階層)
com/example/text/MainApplet.class ←起動クラス(ここだと res が上位階層になり、上手く読めない)
res/~ ←リソース(ルートでも良い)
まぁ、Applet はすべてをルートに置いても問題なく動くけどね。または jar コマンドを使って、リソースを同・下位階層に置くとか。
ただ、Eclipse で開発する分には階層対応で作った方が、そのままアーカイブにできるし楽なんだよね。その辺はご自由に。
(関連記事)
【Applet】jar 内リソースからテキストファイルを読み込む
【Apple/汎用】URL経由でWebサーバ上のテキストファイルを読み込む
【汎用】ストリームからテキストファイルを読み込む(ストリームから読み込み、テキストエンコードして返す)
【汎用】ローカルシステム(Windows 等)から、テキストファイルを読み込む
【Android】res/raw リソースフォルダからテキストファイルを読み込む
【Android】assets フォルダからテキストファイルを読み込む
【Android】内部ストレージからテキストファイルを読み込む
【Android】内部ストレージにテキストファイルを保存する
【Android】SDカードからテキストファイルを読み込む
【Android】SDカードにテキストファイルを保存する
【Android】【Applet】【Java】テキストファイルの読み込み・保存 まとめ
【Android】Preference 機能を使ってデータを読み込み・保存する
- 関連記事
-
-
【Applet】【Java】URL経由でWebサーバ上のテキストファイルを読み込む
-
【Applet】【Java】jar 内のリソースを取得する
-
【Applet】【Java】クラスから自身の jar の URL を取得する
-
【Applet】【Java】jar 内リソースからテキストファイルを読み込む
-
トラックバック
トラックバックURL
→http://fantom1x.blog130.fc2.com/tb.php/115-7b2ede18
この記事にトラックバックする(FC2ブログユーザー)
| h o m e |