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文件,可以这样读取
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");
添加回答
举报
0/150
提交
取消