Java属性文件的几种读取方法

暂时先总结三种方法,后续更新中


**********************概要说明*******************************

1.属性文件放在当前项目的src根目录

2.属性文件database.properties内容

#database properties
user=muyangren
password=onlyyou
ip=192.168.0.88
port=1521
sid=cloud

***********************************************************

package com.test.properties;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Enumeration;
import java.util.Locale;
import java.util.Properties;
import java.util.ResourceBundle;

/**
 * 属性文件的读取
 * 
 * @author 牧羊人
 * @date 2012-10-31
 * @version 1.0
 */
public class TestProperties {

	static String user;
	static String password;
	static String ip;
	static int port;
	static String sid;

	// 静态代码块取得资源文件
	static {
		try {
			// 资源绑定
			ResourceBundle rb = ResourceBundle.getBundle("database", Locale.getDefault());
			user = rb.getString("user");
			password = rb.getString("password");
			ip = rb.getString("ip");
			port = (rb.getString("port") == null || rb.getString("port").trim().equals("")) ? -1 : Integer.parseInt(
                                rb.getString("port").trim());
			sid = rb.getString("sid");
		} catch (Exception ex) {
			System.err.println("read resource error!");
		}
	}

	public static void main(String[] args) {
		// 读取属性文件中的属性
		System.out.println("user:" + user);
		System.out.println("password:" + password);
		System.out.println("ip:" + ip);
		System.out.println("port:" + port);
		System.out.println("sid:" + sid);
		
		//直接通过流的方式来加载
		new TestProperties().getPropertiesByDirectReadFile();
		//获取资源作为流的形式读取
		new TestProperties().getPropertiesByResoureAsStream();
	}

	/**
	 * 直接通过流的方式来加载
	 * 
	 * 属性文件路径:F:/sharep/code_日期,本地化,属性文件,随机类,集合,栈,时区/database.properties
	 */
	@SuppressWarnings("unchecked")
	public void getPropertiesByDirectReadFile() {
		InputStream in = null;

		try {
			in = new FileInputStream(new File("F:/sharep/code_日期,本地化,属性文件,随机类,集合,栈,时区/database.properties");

			Properties prop = new Properties();
			prop.load(in);

			// 取得所有的属性键值
			Enumeration e = prop.propertyNames();
			while (e.hasMoreElements()) {
				String propKey = (String) e.nextElement();
				String propValue = prop.getProperty(propKey);
				System.out.println("propKey:" + propKey + " propValue:" + propValue);
			}
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			try {
				if (in != null)
					in.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}

	/**
	 * 获取资源作为流的形式读取
	 * 
	 * 属性文件路径:当前项目src根目录
	 */
	@SuppressWarnings("unchecked")
	public void getPropertiesByResoureAsStream() {
		InputStream in = this.getClass().getClassLoader().getResourceAsStream( "database.properties");

		Properties prop = new Properties();
		try {
			prop.load(in);
			// 取得所有的属性键值
			Enumeration e = prop.propertyNames();
			while (e.hasMoreElements()) {
				String propKey = (String) e.nextElement();
				String propValue = prop.getProperty(propKey);
				System.out.println("propKey:" + propKey + " propValue:" + propValue);
			}
		} catch (Exception ex) {
			ex.printStackTrace();
		}
	}
}

PS:

使用ResourceBundle访问本地资源
        在设计时,我们往往需要访问一些适合本地修改的配置信息,如果作为静态变量,那么每次修改都需要重新编译一个class,.config保存此类信息并不适合,这时我们需要ResourceBundle。
   通过ResourceBundle,我们需要访问位于/WEB-INF/classes目录下的一个后缀名为properties的文本类型文件,从里面读取我们需要的值。

    Locale locale = Locale.getDefault();
    ResourceBundle localResource = ResourceBundle.getBundle("ConnResource", locale);

    String value = localResource.getString("test");
    System.out.println("ResourceBundle: " + value);

    这里对应了/WEB-INF/class/ConnResource.properties文件内容为:

    test=hello world

    打印出来的结果就是hello world
    
    请注意,这里我们可以利用Locale和ResourceBundle的这个组合创建国际化的java程序。我们可以把locale实例化为new Locale("zh","CN");

    通过ResourceBundle.getBundle("MessagesBundle", locale);

    系统将自动寻找MessagesBundle_zh_CN,即定义为中国大陆地区简体中文。如果没有该文件,则会依次寻找MessagesBundle_zh,MessagesBundle,直到找到为止

“向日葵看不到太阳也会开放。有些事情不是看到希望才去坚持,而是坚持了才会看到希望!”

author:牧羊人

date:   2012-10-31 23:11

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值