Java读取工程下面的*.properties文件

import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.Hashtable;
import java.util.Properties;

import org.apache.log4j.Logger;

public class PropertyEditor {
private static Logger _log = Logger.getLogger(PropertyEditor.class);

private static Hashtable<String, Properties> pptContainer = new Hashtable<String, Properties>();

/**
*
* 方法用途和描述: 获得属性
*
* @param propertyFilePath 属性文件(包括类路径)
* @param key 属性键
* @return 属性值
* @author yushibo 新增日期:2010-11-16
* @author yushibo 修改日期:2010-11-16
* @since wapportal_manager version(2.0)
*/
public final static String getValue(String propertyFilePath, String key) {
Properties ppts = getProperties(propertyFilePath);
return ppts == null ? null : ppts.getProperty(key);
}

/**
*
* 方法用途和描述: 获得属性文件中Key所对应的值
*
* @param propertyFilePath 属性文件路径(包括类路径或文件系统中文件路径)
* @param key 属性的键
* @param isAbsolutePath 是否为绝对路径:true|false〔即是本地文件系统路径,比如:C:/test.propreties〕 注:不能通过类路径来获取到属性文件,而只知道属性文件的文件系统路径,即文件系统地址则用此方法来获取其中的Key所对应的Value
* @return key的属性值
* @author yushibo 新增日期:2010-11-16
* @author yushibo 修改日期:2010-11-16
* @since wapportal_manager version(2.0)
*/
public final static String getValue(String propertyFilePath, String key,
boolean isAbsolutePath) {
if (isAbsolutePath) {
Properties ppts = getPropertiesByFs(propertyFilePath);
return ppts == null ? null : ppts.getProperty(key);
}
return getValue(propertyFilePath, key);
}

/**
*
* 方法用途和描述: 获得属性文件的属性
*
* @param propertyFilePath 属性文件(包括类路径)
* @return 属性
* @author yushibo 新增日期:2010-11-16
* @author yushibo 修改日期:2010-11-16
* @since wapportal_manager version(2.0)
*/
public final static Properties getProperties(String propertyFilePath) {
if (propertyFilePath == null) {
_log.error("propertyFilePath is null!");
return null;
}
Properties ppts = pptContainer.get(propertyFilePath);
if (ppts == null) {
ppts = loadPropertyFile(propertyFilePath);
if (ppts != null) {
pptContainer.put(propertyFilePath, ppts);
}
}
return ppts;
}

/**
*
* 方法用途和描述: 获得属性文件的属性
*
* @param propertyFilePath 属性文件路径(包括类路径及文件系统路径)
* @return 属性文件对象 Properties
* @author yushibo 新增日期:2010-11-16
* @author yushibo 修改日期:2010-11-16
* @since wapportal_manager version(2.0)
*/
public final static Properties getPropertiesByFs(String propertyFilePath) {
if (propertyFilePath == null) {
_log.error("propertyFilePath is null!");
return null;
}
Properties ppts = pptContainer.get(propertyFilePath);
if (ppts == null) {
ppts = loadPropertyFileByFileSystem(propertyFilePath);
if (ppts != null) {
pptContainer.put(propertyFilePath, ppts);
}
}
return ppts;
}

/**
*
* 方法用途和描述: 加载属性
*
* @param propertyFilePath 属性文件(包括类路径)
* @return 属性
* @author yushibo 新增日期:2010-11-16
* @author yushibo 修改日期:2010-11-16
* @since wapportal_manager version(2.0)
*/
private static Properties loadPropertyFile(String propertyFilePath) {
java.io.InputStream is = PropertyEditor.class.getResourceAsStream(propertyFilePath);
if (is == null) {
return loadPropertyFileByFileSystem(propertyFilePath);
}
Properties ppts = new Properties();
try {
ppts.load(is);
return ppts;
} catch (Exception e) {
_log.debug("加载属性文件出错:" + propertyFilePath, e);
return null;
}
}

/**
*
* 方法用途和描述: 从文件系统加载属性文件
*
* @param propertyFilePath 属性文件(文件系统的文件路径)
* @return 属性
* @author yushibo 新增日期:2010-11-16
* @author yushibo 修改日期:2010-11-16
* @since wapportal_manager version(2.0)
*/
private static Properties loadPropertyFileByFileSystem(
final String propertyFilePath) {
try {
Properties ppts = new Properties();
ppts.load(new java.io.FileInputStream(propertyFilePath));
return ppts;
} catch (java.io.FileNotFoundException e) {
_log.error("FileInputStream(\"" + propertyFilePath + "\")! FileNotFoundException: " + e);
return null;
} catch (java.io.IOException e) {
_log.error("Properties.load(InputStream)! IOException: " + e);
return null;
}
}

/**
*
* 方法用途和描述: 对存在的属性文件中添加键值对并保存
*
* @param propertyFilePath 属性文件的路径(包括类路径及文件系统路径)
* @param htKeyValue 键值对Hashtable
* @return
* @author yushibo 新增日期:2010-11-16
* @author yushibo 修改日期:2010-11-16
* @since wapportal_manager version(2.0)
*/
public final static boolean setValueAndStore(String propertyFilePath,
java.util.Hashtable<String, String> htKeyValue) {
return setValueAndStore(propertyFilePath, htKeyValue, null);
}

/**
*
* 方法用途和描述: 对存在的属性文件中添加键值对并保存
*
* @param propertyFilePath 属性文件的路径(包括类路径及文件系统路径)
* @param htKeyValue 键值对Hashtable
* @param storeMsg 保存时添加的附加信息(注释)
* @return
* @author yushibo 新增日期:2010-11-16
* @author yushibo 修改日期:2010-11-16
* @since wapportal_manager version(2.0)
*/
public final static boolean setValueAndStore(String propertyFilePath,
java.util.Hashtable<String, String> htKeyValue, String storeMsg) {
Properties ppts = getProperties(propertyFilePath);
if (ppts == null || htKeyValue == null) {
return false;
}
ppts.putAll(htKeyValue);
java.io.OutputStream stream = null;
try {
stream = new java.io.FileOutputStream(propertyFilePath);
} catch (FileNotFoundException e) {
_log.debug("propertyFilePath = " + propertyFilePath);
String path = PropertyEditor.class.getResource(propertyFilePath).getPath();
_log.debug("~~~~~~~~path~~~XXX~~~~~" + path);
try {
stream = new java.io.FileOutputStream(path);
} catch (FileNotFoundException e1) {
_log.error("FileNotFoundException! path=" + propertyFilePath);
return false;
}
}

if (stream == null) {
return false;
}

try {
ppts.store(stream, storeMsg != null ? storeMsg : "set value and store.");
return true;
} catch (java.io.IOException e) {
e.printStackTrace();
return false;
} finally {
if (stream != null) {
try {
stream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}

/**
*
* 方法用途和描述: 创建属性文件
*
* @param propertyFilePath 要存储属性文件的路径
* @param htKeyValue 属性文件中的键值对Hashtable
* @return
* @author yushibo 新增日期:2010-11-16
* @author yushibo 修改日期:2010-11-16
* @since wapportal_manager version(2.0)
*/
public final static boolean createPropertiesFile(String propertyFilePath, java.util.Hashtable<String, String> htKeyValue) {
java.io.File file = new java.io.File(propertyFilePath);
if (!file.exists()) {
try {
file.createNewFile();
} catch (java.io.IOException e) {
e.printStackTrace();
}
}
return setValueAndStore(propertyFilePath, htKeyValue, "create properties file:" + file.getName());
}

/**
*
* 方法用途和描述:设置属性值
*
* @param propertyFilePath 属性文件(包括类路径)
* @param key 属性键
* @param value 属性值
* @return
* @author yushibo 新增日期:2010-11-16
* @author yushibo 修改日期:2010-11-16
* @since wapportal_manager version(2.0)
*/
public final static boolean setValue(String propertyFilePath, String key, String value) {
Properties ppts = getProperties(propertyFilePath);
if (ppts == null) {
return false;
}
ppts.put(key, value);
return true;
}

/**
*
* 方法用途和描述: 保存属性文件对象
*
* @param properties 属性文件对象
* @param propertyFilePath 要保存的路径
* @param msg 保存时添加的附加信息(注释)
* @author yushibo 新增日期:2010-11-16
* @author yushibo 修改日期:2010-11-16
* @since wapportal_manager version(2.0)
*/
public final static void store(Properties properties, String propertyFilePath, String msg) {
try {
java.io.OutputStream stream = new java.io.FileOutputStream(propertyFilePath);
properties.store(stream, msg);
} catch (java.io.FileNotFoundException e) {
_log.error("FileOutputStream(" + propertyFilePath + ")! FileNotFoundException: " + e);
} catch (java.io.IOException e) {
_log.error("store(stream, msg)! IOException: " + e);
e.printStackTrace();
}
}

/**
*
* 方法用途和描述: 删除属性值
*
* @param propertyFilePath
* 属性文件(包括类路径)
* @param key
* 属性键
* @return
* @author yushibo 新增日期:2010-11-16
* @author yushibo 修改日期:2010-11-16
* @since wapportal_manager version(2.0)
*/
public final static String removeValue(String propertyFilePath, String key) {
Properties ppts = getProperties(propertyFilePath);
if (ppts == null) {
return null;
}
return (String) ppts.remove(key);
}

/**
*
* 方法用途和描述: 删除属性文件中的Key数组所对应的键值对
*
* @param propertyFilePath 属性文件路径(包括类路径及文件系统路径)
* @param key 数组
* @return 属性文件对象
* @author yushibo 新增日期:2010-11-16
* @author yushibo 修改日期:2010-11-16
* @since wapportal_manager version(2.0)
*/
public final static Properties removeValue(String propertyFilePath, String[] key) {
if (key == null) {
_log.error("key[] is null!");
return null;
}
Properties ppts = getProperties(propertyFilePath);
if (ppts == null) {
return null;
}
for (String strKey : key) {
ppts.remove(strKey);
}
return ppts;
}

/**
*
* 方法用途和描述:删除属性文件中的Key数组所对应的键值对,并将属性文件对象持久化(即保存)
*
* @param propertyFilePath 属性文件路径(包括类路径及文件系统路径)
* @param key 属性文件中的key数组
* @return 成功与否(true|false)
* @author yushibo 新增日期:2010-11-16
* @author yushibo 修改日期:2010-11-16
* @since wapportal_manager version(2.0)
*/
public final static boolean removeValueAndStore(String propertyFilePath, String[] key) {
Properties ppts = removeValue(propertyFilePath, key);
if (ppts == null) {
return false;
}
store(ppts, propertyFilePath, "batch remove key value!");
return true;
}

/**
*
* 方法用途和描述: 更新指定路径的属性文件中的键所对应的值
*
* @param propertyFilePath 属性文件路径(包括类路径及文件系统路径)
* @param key 属性文件中的key
* @param newValue 要更新的新值
* @return 成功与否(true|false)
* @author yushibo 新增日期:2010-11-16
* @author yushibo 修改日期:2010-11-16
* @since wapportal_manager version(2.0)
*/
public final static boolean updateValue(String propertyFilePath, String key, String newValue) {
if (key == null || newValue == null) {
_log.error("key or newValue is null!");
return false;
}
java.util.Hashtable<String, String> ht = new java.util.Hashtable<String, String>();
ht.put(key, newValue);
return setValueAndStore(propertyFilePath, ht, "update " + key + "'s value!");
}

/**
*
* 方法用途和描述: 批量更新指定路径的属性文件中的键所对应的值
*
* @param propertyFilePath 属性文件路径(包括类路径及文件系统路径)
* @param htKeyValue 要更新的键值对Hashtable
* @return 成功与否(true|false)
* @author yushibo 新增日期:2010-11-16
* @author yushibo 修改日期:2010-11-16
* @since wapportal_manager version(2.0)
*/
public final static boolean batchUpdateValue(String propertyFilePath, java.util.Hashtable<String, String> htKeyValue) {
if (propertyFilePath == null || htKeyValue == null) {
return false;
}
return setValueAndStore(propertyFilePath, htKeyValue, "batch update key value!");
}

/**
*
* 方法用途和描述: 移除加载的属性文件
*
* @param propertyFilePath 属性文件(包括类路径)
* @return
* @author yushibo 新增日期:2010-11-16
* @author yushibo 修改日期:2010-11-16
* @since wapportal_manager version(2.0)
*/
public final static Properties removePropertyFile(String propertyFilePath) {
return pptContainer.remove(propertyFilePath);
}

/**
*
* 方法用途和描述: 重新加载某个Property文件
*
* @param propertyFilePath 要重新加载的Property文件,如果当前内存中没有的话则加载,否则替换
* @author yushibo 新增日期:2010-11-16
* @author yushibo 修改日期:2010-11-16
* @since wapportal_manager version(2.0)
*/
public final static void reloadPropertyFile(String propertyFilePath) {
pptContainer.remove(propertyFilePath);
loadPropertyFile(propertyFilePath);
}

/**
*
* 方法用途和描述: 获得属性文件的路径
*
* @param pkg 包名
* @param propertyFileName 属性文件名
* @return
* @author yushibo 新增日期:2010-11-16
* @author yushibo 修改日期:2010-11-16
* @since wapportal_manager version(2.0)
*/
public final static String getPpropertyFilePath(String pkg, String propertyFileName) {
pkg = pkg == null ? "" : pkg.replaceAll("\\.", "/");
propertyFileName = propertyFileName.endsWith(".properties") ? propertyFileName : (propertyFileName + ".properties");
return "/" + pkg + "/" + propertyFileName;
}

public static void main(String[] args) {
String path = "/dbRangeMap.properties";
String value = PropertyEditor.getValue(path, "jdbc.ip");
System.out.println("value = " + value);
// _log.info("value = " + value);
// Hashtable</string><string , String> ht = new Hashtable</string><string , String>();
// ht.put("name", "dengcd");
// PropertyReader.setValueAndStore(path, ht);
// String v_ = PropertyReader.getValue(path, "name");
// _log.info("value1 = " + v_);
// PropertyReader.reloadPropertyFile(path);
// String v2_ = PropertyReader.getValue(path, "name");
// _log.info("value2 = " + v2_);

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值