我有一个读取资源文件的类方法,但是当我尝试使用单元测试运行此类时,无法找到文件。
如果我要部署应用程序之战或者只是使用maven从eclipse运行它,一切正常。
文件位置(不确定是否需要src / test / resources,仅在我遇到问题后添加它,但没有帮助):
src/main/resources/
-> com
-> xxxx
-> xxxx_portal
-> web
-> server
-> servlet
-> reports -> Logo.png
src/test/resources/
-> com
-> xxxx
-> xxxx_portal
-> web
-> server
-> servlet
-> reports -> Logo.png
相关课程代码:
package com.xxxx.xxxx_portal.web.server.servlet.reports;
public class ModuleReports {
private static final String LOGO_IMAGE_PATH = "/com/xxxx/xxxx_portal/web/server/servlet/reports/Logo.png";
...
private static InputStream getLogoImage() {
ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
InputStream is = classLoader.getResourceAsStream(LOGO_IMAGE_PATH); //Problem here, InputStream is null. It should not be null.
return is;
}
...
}
答案 0 :(得分:0)
ClassLoader.getResourceAsStream的参数不能以斜杠(/
)开头。虽然您可以从ACDLABS_LOGO_IMAGE_PATH的值中删除初始斜杠,但您应该使用Class.getResourceAsStream而不是ClassLoader.getResourceAsStream:
private static InputStream getLogoImage() {
return ModuleReports.class.getResourceAsStream("ACDLogo.png");
}
与ClassLoader.getResourceAsStream不同,Class.getResourceAsStream 的参数可以以斜杠开头,但不需要。如果不是,则假定该字符串指向与调用它的类相同的包中的资源。所有这些行为都在the documentation。
中描述