Java Webアプリケーションで、CLASSPATH(つまり、sourcesフォルダー内)に配置されているXMLファイルのInputStreamを取得したい場合、どうすればよいですか?
回答:
ClassLoader.getResourceAsStream()
。
以下のコメントで述べられているように、マルチClassLoader
環境(ユニットテスト、webappsなど)を使用してThread.currentThread().getContextClassLoader()
いる場合は、を使用する必要がある場合があります。http://stackoverflow.com/questions/2308188/getresourceasstream-vs-fileinputstream/2308388#comment21307593_2308388を参照してください。
InputStream is = new ClassPathResource("/path/to/your/file").getInputStream()
ClassLoader.class.getResourceAsStream("/path/file.ext");
java.lang.NullPointerException: null
と、エラーが発生します。、そして私が考える最も簡単な方法はnew ClassPathResource("/path/to/your/file").getInputStream()
someClassWithinYourSourceDir.getClass()。getResourceAsStream();
getClass().getResourceAsStream("...")
など
提案された解決策を試しましたが、ファイル名のスラッシュが機能しませんでした。例:...()。getResourceAsStream( "/ my.properties"); nullが返されました
スラッシュの削除は機能しました:.... getResourceAsStream( "my.properties");
これはdocAPIからのものです:委任の前に、絶対リソース名はこのアルゴリズムを使用して指定されたリソース名から構築されます:
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').
null
なしで取得していました/
。スラッシュ文字を追加するとうまくいきました。@ hussein-terekと私のセットアップおよびあなたのセットアップの間には他の違いがあるはずです。