、あなたはそのURLを取得することができ、その後のように、それを解析この:あなたのリソースは、JARアーカイブからではなく、あなたのファイルシステム内のフラット・ファイルから直接読み込み、Fileオブジェクトを介したので、実際にはアクセスできませんすることができる。
URL url = getClass().getResource("/WEB-INF/web.xml");
String path = url.toString();
if (path.startsWith("file:/")) {
path = path.substring("file:/".length());
File file = new File(path);
...do something with the file...
}
注意すべき点は、しかし、があります。上のコードはJBoss(Tomcatを含む)で動作しましたが、JBossはそれを展開する前にWARアーカイブを展開しています。純粋なTomcatでも同様です。
主な質問は、なぜリソースをFileオブジェクトの形で取得したいのですか?たぶんURLを取得するだけで十分ですか?それとも、読み込みアクセスが必要なのでしょうか?
あなたが必要とするすべてのアクセスを読んでいる場合は、(上記のweb.xmlのように)あなたのクラスパス上の任意のリソースを取得する最も簡単な方法は、単純に呼び出すことである:
InputStream in = getClass().getResourceAsStream("/WEB-INF/web.xml")
あなたは、ファイルへの書き込みアクセスをしたい場合、もっと良い解決策はディレクトリを事前に設定し(例えばweb.xml経由で)、そこに必要なすべてのファイルを(例えば上記のgetResourceAsStreamメソッドを介して)解凍し、あらかじめ定義されたディレクトリから編集してアクセスすることですこれはアプリケーションサーバーから独立しています。