从类路径资源获取输入流(XML文件)

Vee*_*era 77 java file-io inputstream

在Java Web应用程序中,假设我想获取XML文件的InputStream,该文件放在CLASSPATH中(即在sources文件夹中),我该怎么做?

cle*_*tus 93

ClassLoader.getResourceAsStream().

如下面的评论中所述,如果您处于多ClassLoader环境(例如单元测试,Web应用程序等),则可能需要使用Thread.currentThread().getContextClassLoader().请参见http://stackoverflow.com/questions/2308188/getresourceasstream-vs-fileinputstream/2308388#comment21307593_2308388.

  • 如果您处于多类加载器环境(例如单元测试/ webapps等)中,则可能需要使用此Thread.currentThread().getContextClassLoader().见http://stackoverflow.com/questions/2308188/getresourceasstream-vs-fileinputstream/2308388#comment21307593_2308388 (13认同)
  • 另一种方式:`InputStream is = new ClassPathResource("/ path/to/your/file").getInputStream()` (5认同)
  • @zhuguowei ClassPathResource是一个Spring类。 (2认同)

小智 30

ClassLoader.class.getResourceAsStream("/path/file.ext");
Run Code Online (Sandbox Code Playgroud)


Aar*_*lla 12

这取决于XML文件的确切位置.它是在sources文件夹(在"默认包"或"根"中)还是在类的同一文件夹中?

对于前一种情况,您必须使用" /file.xml"(注意前导斜杠)来查找文件,并且使用哪个类来尝试找到它并不重要.

如果XML文件位于某个类的旁边,那么SomeClass.class.getResourceAsStream()只需要文件名即可.


Cli*_*int 11

ClassLoader.class.getResourceAsStream("/path/to/your/xml") 并确保您的编译脚本正在将xml文件复制到CLASSPATH中的位置.


mP.*_*mP. 6

.someClassWithinYourSourceDir.getClass()的getResourceAsStream();