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

下面几种相对路径都不对:不知道怎么回事?

下面几种相对路径都不对:不知道怎么回事?

慕娘9325324 2022-10-11 14:11:41
servlet程序打成一个war,war名叫'test.war',我想访问test.war包中的setting.properties文件,那应该写的相对路径是什么?为什么我怎么写都不对?(写绝对路径是OK的)test.war的目录结构为:WEB-INF  classes  lib  setting.properties  web.xmlJava代码  FileInputStream is = new FileInputStream("/test/WEB-INF/setting.properties");//不行  FileInputStream is = new FileInputStream("/WEB-INF/setting.properties");//不行  FileInputStream is = new FileInputStream("setting.properties");//不行  FileInputStream is = new FileInputStream("D:\\workspace\\test\\WebContent\\WEB-INF\\setting.properties"); //Ok
查看完整描述

2 回答

?
慕斯王

TA贡献1864条经验 获得超2个赞

FileInputStream只能定位绝对路径,所以你填入相对路径当然找不到。

读取资源文件一般根据上下文环境分为两种情况。

第一种是非WEB应用的环境中,只需要简单的通过类加载器的getResourceAsStream方法读取。
例如,classpath根目录下有一个setting.properties文件,可以这样读取

Java代码  

  1. InputStream is = Thread.currentThread().getClass().getResourceAsStream("/setting.properties");  

第二种是WEB应用的环境中,因为应用包含在了Servlet 容器中,所以情况相对来说要复杂一些。
同上一样,读取classpath中的资源,依然通过类加载读取,但是通过上下文的类加载器中去读。
例如,

Java代码  

  1. InputStream is = Thread.currentThread().getContextClassLoader().getResourceAsStream("/setting.properties");  

读取WebContent目录中的情况又不一样了,不能通过类加载器读取,需要通过ServletContext去读。
例如,

Java代码  

  1. InputStream is = request.getServletContext().getResourceAsStream("/WEB-INF/setting.properties");  

查看完整回答
反对 回复 2022-10-16
?
呼如林

TA贡献1798条经验 获得超3个赞

第二种换成\\可以吗?

Java代码  

  1. \\WEB-INF\\setting.properties  

或者用classpath:xxxxxx试试看


查看完整回答
反对 回复 2022-10-16
  • 2 回答
  • 0 关注
  • 115 浏览

添加回答

举报

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