2009-04-27 12 views

答えて

73

ClassLoader.getResourceAsStream()

以下のコメントに記載されているように、複数の環境(ユニットテスト、Webアプリケーションなど)を使用している場合はThread.currentThread().getContextClassLoader()を使用する必要があります。 http://stackoverflow.com/questions/2308188/getresourceasstream-vs-fileinputstream/2308388#comment21307593_2308388を参照してください。

+0

は、コード例のための個人的な記事を参照してください:のhttp:/ /tshikatshikaaa.blogspot.nl/2012/07/maven-how-to-access-filesdata-in.html – JVerstry

+12

マルチクラスローダー環境(ユニットテスト/ Webアプリケーションなど)にいる場合は、このスレッドを使用する必要があります.currentThread()。getContextClassLoader()。http://stackoverflow.com/questions/2308188/getresourceasstream-vs-fileinputstream/2308388#comment21307593_2308388 – khylo

+0

答えに@khyloの提案を追加してください。 – froginvasion

5

someClassWithinYourSourceDir.getClass()。getResourceAsStream();

+0

または 'getClass()。getResourceAsStream(" ... ")など – rogerdpack

10

これは、XMLファイルがどこにあるかによって異なります。ソースフォルダ(「デフォルトパッケージ」または「ルート」)またはクラスと同じフォルダにありますか?

前者の場合、ファイルを見つけるために "/file.xml"(先頭のスラッシュに注意)を使用する必要があります。また、どのクラスを使用してファイルを探しても問題ありません。

XMLファイルがいくつかのクラスの隣にある場合は、ファイル名だけのSomeClass.class.getResourceAsStream()があります。

10

ClassLoader.class.getResourceAsStream("/path/to/your/xml")コンパイルスクリプトがxmlファイルをCLASSPATHのどこにコピーしているかを確認してください。

26
ClassLoader.class.getResourceAsStream("/path/file.ext"); 
+0

しかし、Webをデプロイするjava.lang.NullPointerException:null 'というエラーが発生します。最も簡単な方法は' new ClassPathResource( "/ path/to/your/file")です。getInputStream() ' – zhuguowei

4

"getResourceAsStream()" この答えのオプションが私のために動作しませんでしたのいくつかは、この1でした:。

SomeClassWithinYourSourceDir.class.getClassLoader()getResourceAsStream( "yourResource");

0

はデフォルトでは、各リソースは、WEB-INF/classesに展開戦争でフォルダの下にコピーされたWebアプリケーション内のクラスパスに追加しました。通過日食でアプリケーションを開発しながら

は、あなたがこれを管理することができます

右クリックしてプロジェクト - >プロパティ - > Javaのビルド・パス] - > [ソース]タブ - >デフォルトの出力フォルダサーブレットで

、リソースにアクセスするには、パスの先頭にWEB-INF/classesを指す '/'を付けます。

getClass().getResourceAsStream("/pdf-sample.pdf") 

をこれはtutorialは非常によく読みの可能な方法を説明します

例えば、WEB-INF /クラスPDF-sample.pdfがにアクセスするには、次のように使用することができますJavaアプリケーション内のクラスパスからのリソースファイルです。これは読める価値があります。

0

私は提案された解決策を試してみましたが、ファイル名のスラッシュが私にとってはうまくいかなかった、例:...()。getResourceAsStream( "/ my.properties"); nullが返されました

スラッシュの削除:.... getResourceAsStream( "my。プロパティ ");ここで

は、ドキュメントの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'). 
関連する問題