2012-05-03 35 views
2

Java webappがあり、classpthからファイルを読み込もうとしています。URIスキームは「ファイル」ではありません。クラスパスからファイルを読み取ることができません

if (fileName == null){ 
     fileName = Thread.currentThread().getContextClassLoader().getResource("config.properties"); 
    } 
objFile = new File(fileName.toURI()); 

私のクラスパスにconfig.propertiesがあります。 WEB-INF/classes。私が地元で調べると、fileName.toURI()、それは私にfile:/D:/dev/Tomcat_6_0/webapps/testApp/WEB-INF/classes/config.propertiesを与えます。そしてうまく動作します。

問題は実稼働中のLinuxサーバーにあります。このパスはvfsfile:/export/home/u/bin/jboss-5.1.0.BE/server/default/deploy/testApp.war/WEB-INF/classes/config.propertiesにあります。

そして、私は例外を受けています。

Caused by: java.lang.IllegalArgumentException: URI scheme is not "file" 
    at java.io.File.<init>(File.java:366) 
    at com.utils.ConfigLoader.loadConfigFilePath(ConfigLoader.java:87) 

vfsのハンドリングの回避策は何ですか?

答えて

2

リソースをクラスパスからファイルに変換しないでください。 WAR/JARの中にある場合、Fileでなくてもよいでしょう。 Fileクラスはファイルシステムオブジェクトのみを表します。

+0

はい、それは私の戦いです。文字列vfsfile:/をfile:/ファイルコンストラクタに変更するとよいですか? –

+0

いいえ、それはディスク上のファイルではなく、そうでない場合、 'File'はそれを表すことができません。 –

2

リソースをロードしているので(ファイルであってもなくてもかまいませんが、このプロパティファイルがjar/warにパッケージされていると想像してください)、なぜURLオブジェクトにopenStream()を使用しないのですか?その後、返されたBufferedStreamからコンテンツを読み込んでください。

関連する問題