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

servlet程序打成一个war,war名叫'test.war',我想访问test.war包中的setting.properties文件,那应该写的相对路径是什么?为什么我怎么写都不对?(写绝对路径是OK的)
test.war的目录结构为:
WEB-INF
  classes
  lib
  setting.properties
  web.xml

Java代码  

  1. FileInputStream is = new FileInputStream("/test/WEB-INF/setting.properties");//不行  

  2. FileInputStream is = new FileInputStream("/WEB-INF/setting.properties");//不行  

  3. FileInputStream is = new FileInputStream("setting.properties");//不行  

  4. FileInputStream is = new FileInputStream("D:\\workspace\\test\\WebContent\\WEB-INF\\setting.properties"); //Ok


慕娘9325324
浏览 116回答 2
2回答

慕斯王

FileInputStream只能定位绝对路径,所以你填入相对路径当然找不到。读取资源文件一般根据上下文环境分为两种情况。第一种是非WEB应用的环境中,只需要简单的通过类加载器的getResourceAsStream方法读取。例如,classpath根目录下有一个setting.properties文件,可以这样读取Java代码  InputStream is = Thread.currentThread().getClass().getResourceAsStream("/setting.properties");  第二种是WEB应用的环境中,因为应用包含在了Servlet 容器中,所以情况相对来说要复杂一些。同上一样,读取classpath中的资源,依然通过类加载读取,但是通过上下文的类加载器中去读。例如,Java代码  InputStream is = Thread.currentThread().getContextClassLoader().getResourceAsStream("/setting.properties");  读取WebContent目录中的情况又不一样了,不能通过类加载器读取,需要通过ServletContext去读。例如,Java代码  InputStream is = request.getServletContext().getResourceAsStream("/WEB-INF/setting.properties");  

呼如林

第二种换成\\可以吗?Java代码  \\WEB-INF\\setting.properties  或者用classpath:xxxxxx试试看
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java
JavaScript