为了账号安全,请及时绑定邮箱和手机立即绑定

getResourceAsStream()始终返回null

getResourceAsStream()始终返回null

FFIVE 2019-10-11 14:27:15
我在Java Web应用程序中具有以下结构:TheProject  -- [Web Pages]  -- -- [WEB-INF]  -- -- -- abc.txt  -- -- index.jsp  -- [Source Packages]  -- -- [wservices]  -- -- -- WS.java在中WS.java,我在Web方法中使用以下代码:InputStream fstream = this.getClass().getResourceAsStream("abc.txt");但是它总是返回null。我需要读取该文件,并且我读到如果将文件放入其中WEB-INF,则可以使用进行访问getResourceAsStream,但是该方法始终返回null。对我可能做错的任何想法?顺便说一句,奇怪的是它正在工作,但是在我Clean and Build对项目执行了一个操作之后,它突然停止工作了:/
查看完整描述

3 回答

?
qq_遁去的一_1

TA贡献1725条经验 获得超7个赞

Class#getResourceAsStream(String)在类路径中搜索对类加载器和资源的委托的调用。换句话说,你当前的代码将无法正常工作,你应该把abc.txt在WEB-INF/classes,或者WEB-INF/lib如果打包在一个jar文件。


或使用ServletContext.getResourceAsStream(String)该允许servlet容器来使资源可从任何地点一个servlet,而无需使用一个类加载器。因此,从Servlet使用它:


this.getServletContext().getResourceAsStream("/WEB-INF/abc.txt") ;

但是有什么方法可以从Web服务调用getServletContext吗?


如果使用的是JAX-WS,则可以WebServiceContext注入:


@Resource

private WebServiceContext wsContext;

然后从中获取ServletContext:


ServletContext sContext= wsContext.getMessageContext()

                             .get(MessageContext.SERVLET_CONTEXT));


查看完整回答
反对 回复 2019-10-11
?
莫回无

TA贡献1865条经验 获得超7个赞

代替


InputStream fstream = this.getClass().getResourceAsStream("abc.txt"); 

采用


InputStream fstream = this.getClass().getClassLoader().getResourceAsStream("abc.txt");

这样,它将从根目录而不是当前调用类的路径进行查看


查看完整回答
反对 回复 2019-10-11
  • 3 回答
  • 0 关注
  • 7536 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信