Java读取资源文件的那些事

      本文主要讲解和总结java读取properties/xml等资源文件的几种方法,以备来日使用时翻阅。无论是Servlet、Struts或者Spring、Hibernate,配置资源文件都是必不可少的一项工作,Java中主要提供了提供了2个类来读取资源文件,一个是Class类,一个是ClassLoader类。我们一步步来分析,要获取一个文件的内容,那第一步肯定是要先获取文件的路径,第二步才是读取文件内容。


     本文地址:http://blog.csdn.net/chen_zw/article/details/18771897


      步骤一:获取资源文件路径

       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 )目录下,而两者的读取方式也是不同的。

        我们先来看看放在source folder(src )目录下的资源文件如何读取的吧,假设资源文件放置在这里:

          

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种方式获取的资源文件是同一个。
	}

}

          再来看看放在WebRoot目录下的资源文件是怎么读取的,假设资源文件存放在这里:

          


     步骤二:读取资源文件

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"));
	}

}

  • 4
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

夜之子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值