Java Webアプリケーションで、CLASSPATH(sourcesフォルダー内)に配置されているXMLファイルのInputStreamを取得する場合、どうすればよいですか?
ClassLoader.getResourceAsStream()
。
以下のコメントで述べられているように、マルチClassLoader
環境(ユニットテスト、webappsなど)にいる場合は、Thread.currentThread().getContextClassLoader()
を使用する必要があります。 http://stackoverflow.com/questions/2308188/getresourceasstream-vs-fileinputstream/2308388#comment21307593_2308388 を参照してください。
ClassLoader.class.getResourceAsStream("/path/file.ext");
これは、XMLファイルがどこにあるかによって異なります。ソースフォルダー(「デフォルトパッケージ」または「ルート」)にあるのですか、それともクラスと同じフォルダーにあるのですか?
前者の場合、「/file.xml
」(先頭のスラッシュに注意)を使用してファイルを検索する必要があります。ファイルを見つけるために使用するクラスは関係ありません。
XMLファイルが何らかのクラスの隣にある場合、ファイル名のみを含むSomeClass.class.getResourceAsStream()
が道です。
ClassLoader.class.getResourceAsStream("/path/to/your/xml")
そして、コンパイルスクリプトがxmlファイルをCLASSPATHの場所にコピーしていることを確認します。
someClassWithinYourSourceDir.getClass()。getResourceAsStream();
この回答の「getResourceAsStream()」オプションのいくつかは機能しませんでしたが、これは機能しました:
SomeClassWithinYourSourceDir.class.getClassLoader()。getResourceAsStream( "yourResource");
提案された解決策を試してみましたが、ファイル名のスラッシュは機能しませんでした。例:...()。getResourceAsStream( "/ my.properties"); nullが返されました
スラッシュの削除は機能しました:.... getResourceAsStream( "my.properties");
これはdoc APIからのものです。委任前に、このアルゴリズムを使用して、指定されたリソース名から絶対リソース名が構築されます。
If the name begins with a '/' ('\u002f'), then the absolute name of the resource is the portion of the name following the '/'.
Otherwise, the absolute name is of the following form:
modified_package_name/name
Where the modified_package_name is the package name of this object with '/' substituted for '.' ('\u002e').