关于读取Properties文件的相对路径问题,怎么写是正确的?

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

下面几种相对路径都不对:不知道怎么回事?
[code="java"]
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
[/code]

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

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

第一种是非WEB应用的环境中,只需要简单的通过类加载器的getResourceAsStream方法读取。
例如,classpath根目录下有一个setting.properties文件,可以这样读取
[code="java"]
InputStream is = Thread.currentThread().getClass().getResourceAsStream("/setting.properties");
[/code]

第二种是WEB应用的环境中,因为应用包含在了Servlet 容器中,所以情况相对来说要复杂一些。
同上一样,读取classpath中的资源,依然通过类加载读取,但是通过上下文的类加载器中去读。
例如,
[code="java"]InputStream is = Thread.currentThread().getContextClassLoader().getResourceAsStream("/setting.properties");[/code]

读取WebContent目录中的情况又不一样了,不能通过类加载器读取,需要通过ServletContext去读。
例如,
[code="java"]InputStream is = request.getServletContext().getResourceAsStream("/WEB-INF/setting.properties");[/code]

第二种换成\可以吗?
[code="java"]
\WEB-INF\setting.properties
[/code]
或者用classpath:xxxxxx试试看