在Java Web应用程序中,假设我想获取XML文件的InputStream,该文件放在CLASSPATH中(即在 sources 文件夹中),我该怎么办?
答案 0 :(得分:91)
ClassLoader.getResourceAsStream()
如下面的评论中所述,如果您处于多ClassLoader
环境(例如单元测试,网络应用等),则可能需要使用Thread.currentThread().getContextClassLoader()
。请参阅http://stackoverflow.com/questions/2308188/getresourceasstream-vs-fileinputstream/2308388#comment21307593_2308388。
答案 1 :(得分:30)
ClassLoader.class.getResourceAsStream("/path/file.ext");
答案 2 :(得分:12)
这取决于XML文件的确切位置。它是在sources文件夹中(在“默认包”或“根”中)还是在与类相同的文件夹中?
对于前一种情况,您必须使用“/file.xml
”(注意前导斜杠)来查找文件,并且使用哪个类来尝试找到它并不重要。
如果XML文件位于某个类的旁边,那么SomeClass.class.getResourceAsStream()
只需要文件名即可。
答案 3 :(得分:11)
ClassLoader.class.getResourceAsStream("/path/to/your/xml")
并确保您的编译脚本正在将xml文件复制到CLASSPATH中的位置。
答案 4 :(得分:6)
someClassWithinYourSourceDir.getClass()的getResourceAsStream();
答案 5 :(得分:4)
一些" getResourceAsStream()"这个答案中的选项对我没有用,但是这个选择了:
SomeClassWithinYourSourceDir.class.getClassLoader()的getResourceAsStream(" yourResource&#34);
答案 6 :(得分:0)
我尝试过提出的解决方案,并且文件名中的正斜杠对我来说不起作用,例如:...()。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').