2012-03-02 7 views
4

は、私が見ることができますデバッガでなぜContextClassLoaderが感嘆符付きのパスを返しますか?

Thread.currentThread().getContextClassLoader(); 
URL url=classLoader.getResource(myconfig); 

とWEB-INF/libにjarファイル内のファイルを開こう: "!"

jar:file:/C:/apache-tomcat/webapps/mywebapp/WEB-INF/lib/myjarresource.jar! 
/conf/configuration.xml 

なぜファイルパスであります? 私はこの理由から、このファイルを開くことができないと思います。 正しいパスを受け取る方法は?おかげさまで

+0

アプリケーションがファイルを開くことができない場合 - スタックトレースはどのように見えますか? – home

答えて

4

!の後に来るものは、のJARファイルです。

myjarresource.jar!/conf/configuration.xmlの場合は、7-zipなどの圧縮ユーティリティを使用してmyjarresource.jarを開くと、conf/configuration.xmlが含まれていることがわかります。 JarURLConnection javadoc

+0

しかし、ファイルfile = new File(url.toFile())は機能しません! – user710818

+0

はい、その場所に物理ファイルが存在しないためです。 JARファイルの内容を読みたい場合は、JAR APIを使用する必要があります。あるいは、クラスパスにJARファイルを設定すれば、 'conf/configuration.xml'を直接読むことができます。 – adarshr

2

は、JARのURLの構文が記載されている:

JARのURLの構文は次のとおりです。jarファイル:! '!'/{}エントリだから、

Javaアーカイブを入力することを示します。

編集: 私はあなたのためのFile file=new File(url.toURI())を行うことができないと信じている「:」生成されたURIに2回出現し、したがって、これは、ファイルのctorに拒否されURI specifications(2.2章および3)に準拠していないしています。

関連する問題