FC2ブログ
ヽ|∵|ゝ(Fantom) の 開発blog? ホーム » Applet »【Applet】【Java】クラスから自身の jar の URL を取得する

【Applet】【Java】クラスから自身の jar の URL を取得する  


Android と Applet 互換ライブラリを作成しているとき、各コンポーネントの仕様の違いで、いくつか必要な機能があったので、その辺を載せてみる。ググっても見つけるのが大変だったものとかね。

起動している自分の jar の URL を取得する方法は色々あったが、結構面倒臭かったので、一番簡単な関数を作ってみた。

//クラスから自身の jar の URL を取得する(jar 内の .class からのみ)
public static final URL getJarFileURL(Object object) {
try {
//ClassLoader から JAR URL の形式の文字列を作る
final ClassLoader loader = object.getClass().getClassLoader();
final String name = object.getClass().getName().replace('.', '/') + ".class";
final URL url = loader.getResource(name);
//パターンマッチングで URL 部分だけ抽出(ただし、"jar:~.jar!/" しか考慮してない)
final Pattern p = Pattern.compile("^jar\\:(.+?\\.jar)\\!\\/(.*)");
final Matcher m = p.matcher(url.toString());
if (m.matches()) {
final MatchResult res = m.toMatchResult();
return new URL(res.group(1));
}
} catch (Exception e) {
//MalformedURLException, ClassCastException, NullPointerException, ...
}
return null; //取得失敗した場合はすべて null
}

//メインでは
URL url = getJarFileURL(this);
System.out.println("url = " + url.toString());

全部一発クラスにつっこんで結果を取得してるので、例外処理は手抜きした(笑)。1つでも上手く取得できなければダメなので、すべて使い捨て final にしてるが、その辺はご自由に。jar ファイル内の .class 以外が引数(object)だと、null が返る。static final 関数で作ってあるので、汎用的に使えるだろう。URL 取得はネットから問い合わせても良いが、レスポンス待つのも面倒なので、正規表現で取得するようにした。本来なら "http://" やポート番号なんかも考慮すべきかもしれないが、JAR URL 構文の仕様を見て、とりあえず自作範囲で使う分には簡単な表現で十分だと考えた。厳正なURLが必要なら修正した方が良いだろう。ついでに、res.group(2) でエントリ部分を取り出す事もできる(ここでは使ってない)。その辺の修正もご自由に。

もちろん、URL クラスで返してるので、入力ストリームを開けば、アプリ実行中にそのまま使える。

//入力ストリームを開く
InputStream is = url.openConnection().getInputStream();

これを使えばリソースも取得できる。実はそのために作ったものだったりする。それはまた次回(笑)。


(関連記事)
【Applet】jar 内リソースからテキストファイルを読み込む
【Applet/汎用】URL経由でWebサーバ上のテキストファイルを読み込む
【汎用】ストリームからテキストファイルを読み込む(ストリームから読み込み、テキストエンコードして返す)
【汎用】ローカルシステム(Windows 等)から、テキストファイルを読み込む
【Android】res/raw リソースフォルダからテキストファイルを読み込む
【Android】assets フォルダからテキストファイルを読み込む
【Android】内部ストレージからテキストファイルを読み込む
【Android】内部ストレージにテキストファイルを保存する
【Android】SDカードからテキストファイルを読み込む
【Android】SDカードにテキストファイルを保存する
【Android】【Applet】【Java】テキストファイルの読み込み・保存 まとめ
【Android】Preference 機能を使ってデータを読み込み・保存する


スポンサーサイト

category: Applet

thread: プログラミング

janre: コンピュータ

tb: 0   cm: --



トラックバック

トラックバックURL
→http://fantom1x.blog130.fc2.com/tb.php/114-4c23fc7d
この記事にトラックバックする(FC2ブログユーザー)

プロフィール

Social

検索フォーム

全記事一覧

カテゴリ

ユーザータグ

最新記事

リンク

PR

▲ Pagetop