- Java读取资源文件的那些事
-
本文主要讲解和总结java读取properties/xml等资源文件的几种方法,以备来日使用时翻阅。无论是Servlet、Struts或者Spring、Hibernate,配置资源文件都是必不可少的一项工作,Java中主要提供了提供了2个类来读取资源文件,一个是Class类,一个是ClassLoader类。我们一步步来分析,要获取一个文件的内容,那第一步肯定是要先获取文件的路径,第二步才是读取文件内容。
步骤一:获取资源文件路径
java的Web项目结构相信大家应该都很熟悉,它大概是这样的:
如上图所示,它主要分为了3部分,一个是source folder(src目录下),一个是output folder(build目录下),最后一个是deploy path(WebRoot) ,可能大家的命名不一样,但这3部分对应的功能是一致的。想修改这3部分对应的文件目录,可以选中项目,右键选properties,然后选中Java Build Path进行修改,如下图所示:
首先说下source folder目录,这个目录下存放的是项目java源码,也就是可阅读、可编写的代码。而output folder目录则存放着java源码编译后生成的字节码,是.class文格式的,最后是deploy path目录,这是javaWeb项目独有的,主要存放的是Web相关的jar包、配置文件和网页资源等。我们可能将要读取的资源文件放在在source folder(src )或者deploy path(WebRoot )目录下,而两者的读取方式也是不同的。<喎�"http://www.2cto.com/kf/ware/vc/" target="_blank" class="keylink">vcD4KPHA+ICAgICAgICDO0sPHz8jAtL+0v7S3xdTac291cmNlIGZvbGRlcqOoc3JjIKOpxL/CvM/CtcTXytS0zsS8/sjnus62wcihtcSwyaOsvNnJ6NfK1LTOxLz+t8XWw9Ta1eLA76O6PC9wPgo8cD4gICAgICAgICAgPGltZyBzcmM9"http://www.2cto.com/uploadfile/Collfiles/20140126/20140126085851106.jpg" alt="\">
public class PropertiesUtil { /** * @Description: 我们使用Class.getResourceAsStream(String path)方法来获取资源文件 * @author: chenzw * @CreateTime: 2014-1-25 下午7:02:40 * @param args * @throws */ public static void main(String[] args) { /* path中不以'/'开头表示该路径是相对路径,相对于当前类所在的目录 */ InputStream is = PropertiesUtil.class.getResourceAsStream("cfg/jdbc.properties"); // 等同于 InputStream is = this.getClass().getResourceAsStream("cfg/jdbc.properties"); --this.getClass()不能在static方法中使用 /* path中以'/'开头表示该路径是绝对路径,相对于classpath的绝对路径 */ InputStream is2 = PropertiesUtil.class.getResourceAsStream("/com/util/cfg/jdbc.properties"); // 等同于 InputStream is2 = this.getClass().getResourceAsStream("/com/util/cfg/jdbc.properties"); --this.getClass()不能在static方法中使用 // 等同于 InputStream is2 = Thread.currentThread().getClass().getResourceAsStream("/com/util/cfg/jdbc.properties"); /* 使用getClassLoader()表示该路径是相对于classpath目录的相对路径*/ InputStream is3 = PropertiesUtil.class.getClassLoader().getResourceAsStream("com/util/cfg/jdbc.properties"); // 等同于 InputStream is3 = this.getClass().getClassLoader().getResourceAsStream("com/util/cfg/jdbc.properties"); --this.getClass()不能在static方法中使用 // 等同于 InputStream is3 = Thread.currentThread().getContextClassLoader().getResourceAsStream("com/util/cfg/jdbc.properties"); //这3种方式获取的资源文件是同一个。 } }
步骤二:读取资源文件
package com.util; import java.io.IOException; import java.io.InputStream; import java.util.Properties; public class PropertiesUtil { /** * @throws IOException * @Description: 我们使用Class.getResourceAsStream(String path)方法来获取资源文件 * @author: chenzw * @CreateTime: 2014-1-25 下午7:02:40 * @param args * @throws */ public static void main(String[] args) throws IOException { //资源文件路径的多种获取方法详见步骤一 InputStream is = PropertiesUtil.class.getResourceAsStream("cfg/jdbc.properties"); Properties ps = new Properties(); //加载properties资源文件 ps.load(is); System.out.println(ps.getProperty("jdbc.url")); System.out.println(ps.getProperty("jdbc.user")); System.out.println(ps.getProperty("jdbc.pass")); } }
-
转自:红黑联盟