- - PR -
Class.getResource(String)について
1
投稿者 | 投稿内容 | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2004-12-19 18:15
こんにちは。
クラスファイルと相対的な位置にあるリソース名を取得するのに、 Class.getResource(String)を使っています。 これは、URLを返すものですが、パス名に空白が入っていたりするとその部分が %20などとエスケープされてしまいます。 こうした文字列をそのまま使ってファイルをオープンしたりする方法を知りません。 そうするのに、URLを簡単に解析する自前のプログラムを使っています。 もっと良い方法はありませんか? OSはWindows XP、Javaは、j2sdk1.4.2_04です。 | ||||||||||||
|
投稿日時: 2004-12-19 22:10
ClassLoaderの概念は、場所、物を問わずにストリームで対象データを取り出す、
ということですので、このクラスを用いファイルデータを取得する場合、getResource() の代わりに getResourceAsStream()を使用された方がすっきりする気がします。 InputStream is = clazz.getResourceAsStream(filename); InputStreamReader isr = new InputStreamReader(is); BufferedReader br = new BufferedReader(isr); | ||||||||||||
|
投稿日時: 2004-12-20 04:09
再度、読み返してみると質問の回答になってませんでしたね。。。済みません。
うーむ、私の環境ではURLのgetPath()の戻り値を標準出力に書き出した限り、 エスケープされてはいないようなのですが。。。
もしエスケープを元に戻すだけなら、java.net.URLDecoder#decode()を用いれば よいのではないかと思います。 私の環境では、
で、ファイルインスタンスを取得できたのですがバージョンによって違うのかも。 ひとつ今回の件で気が付いた事は、java.net.URI(not URL)のコンストラクタ のパス指定で、空白文字が含まれる場合は例外が投げられるという事でした。 少し調べてみたらJava2sdk 1.4以降からのようで、RFCに厳密に対応した為 のようですね。 独り言:結構影響の出る改変だと思うんですが、そこまでの必要性有ったのかな? | ||||||||||||
|
投稿日時: 2004-12-20 14:13
ありがとうございます。事実上解決しました。 |
1