暂时先总结三种方法,后续更新中
**********************概要说明*******************************
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