程序中很多时候需要使用诸如配置文件等类似的资源文件,需要读入这些文件,获取其中的内容并在程序中使用。这就涉及到如何在程序中定位文件的问题。本文介绍java中常用的定位文件的方法。
1. 获取文件的URL
URL url = Main.class.getResource("te st.properties");
或者
URL url = Main.class.getClassLoader().getResource("te st.properties");
上面两个方法其实是一样的,都是调用ClassLoader的方法。
需要注意的是:URL是有编码方案的,通过上面的方法获得的url跟底层的编码方案有关系。注意资源文件名称te st.properties
这段代码在tomcat6下运行,得到的url是file:/D:/dev/workspace/AT/WebRoot/WEB-INF/classes/te st.properties
但是在tomcat7下运行,得到的url是file:/D:/dev/workspace/AT/WebRoot/WEB-INF/classes/te%20st.properties 空格被替换为%20这个地址不能直接作为File的参数去获得File对象的。
可以通过URLDecoder来对URL解码,以便得到我们在java环境下能够正常使用的url字符串。
URLDecoder decoder = new URLDecoder(); String nurl = decoder.decode(url.toString());
上面的代码使用了被废弃的方法,jdk推荐使用带解码编码方式参数的解码方法,这里由于不清楚我们调用ClassLoader的getResource方法时是怎么给URL编码的(以后再详细了解),所以无奈使用了这个废弃的方法。
2. 获得输入流
比起获得文件的URL来说,我觉得,获得输入流的方式更加好些,因为这样避免了由于URL编码问题造成的不同环境下运行时的问题。
InputStream is = Main.class.getResourceAsStream("te st.properties");
或者
InputStream is2 = Main.class.getClassLoader().getResourceAsStream("te st.properties");
这种方式,无论在什么环境下,都能得到此资源文件的输入流。