用于读写Properties属性配制文件的通用类

哈哈,好久没有来了,这段时间在武汉出差,所以都没有什么时间来上网了,好想回家啊!
今天发一个我以前写的读写属性配置文件的类,这个类会在我以后要发的一些类中用到,所以就先把它发上来了!
这个类非常的通用,而且很灵活,要读写的配置文件可以放在ClassPath下的任意一个目录中,只要传入文件路径就可以了!
希望这个能够对大家有些帮助,也希望大家可以多提建议和想法,让我们大家在JavaEye这个大家庭中一起共同进步!

哦,我还想问一个问题,可以用手机上JavaEye吗?

该类在“Database”分类中的《用于JDBC操作数据库的公共类》文章中用到了!

2010-10-28
哈哈,好久没有来发文章了,今天来更新一下以前发过的代码:
我对RWProperties.java进行了一些完善和修改,修正了修改配置文件的一个Bug,改进了读取配置文件的效率,新增了移除属性的方法,完善了注释。
大家如果发现有什么Bug希望能及时搞出来,以便完善这里的代码。


/*
* @(#)RWProperties.java 2010-10-28
*
* Copyright 2010 BianJing,All rights reserved.
*/
package test;

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;

/**
* 用于读写Property属性配置文件的类
*
* @author BianJing<br/>
* E-mail:vipbooks@163.com
* @version 0.9 2010-10-28
*/
public class RWProperties {
private Properties properties;

/** 配置文件的完整路径 */
private String filePath;

/**
* 初始化RWProperties
*
* @param propertyFilePath
* 属性配置文件的完整路径,
* 如:"com/pagination/config/PaginationConfig.properties"
* @return RWProperties的实例
*/
public RWProperties(String propertyFilePath) {
filePath = propertyFilePath;
properties = getProperties(propertyFilePath);
};

/**
* 获得Key值所对应的Value值。
*
* @param key
* 属性配置文件的Key值
* @return Key值所对应的Value值
*/
public String getProperty(String key) {
return properties.getProperty(key);
}

/**
* 修改属性配置文件
*
* @param key
* 属性配置文件的Key值
* @param value
* 属性配置文件的value值
* @param propertyFilePath
* 属性配置文件的完整路径,
* 如:"com/pagination/config/PaginationConfig.properties"
* @return 修改成功返回true,失败则返回false
*/
public boolean setProperty(String key, String value) {
FileOutputStream fos = getFileOutputStream(filePath);

properties.setProperty(key, value);
boolean flag = false;
try {
properties.store(fos, null);
flag = true;
} catch (IOException e) {
e.printStackTrace();
} finally {
if (fos != null) {
try {
fos.flush();
fos.close();
} catch (IOException e) {
e.printStackTrace();
close();
} finally {
fos = null;
}
}
}

return flag;
}

/**
* 移除属性配置文件中的某个属性
*
* @param key
* 属性配置文件的Key值
* @return 移除成功返回true,失败则返回false
*/
public boolean removeProperty(String key) {
FileOutputStream fos = getFileOutputStream(filePath);

properties.remove(key);
boolean flag = false;
try {
properties.store(fos, null);
flag = true;
} catch (IOException e) {
e.printStackTrace();
} finally {
if (fos != null) {
try {
fos.flush();
fos.close();
} catch (IOException e) {
e.printStackTrace();
close();
} finally {
fos = null;
}
}
}

return flag;
}

/**
* 释放资源
*/
public void close() {
if (properties != null) {
properties.clear();
}
}

/**
* 返回加载了配置文件的Properties对象
*
* @param propertyFilePath
* 属性配置文件的完整路径,
* 如:"com/pagination/config/PaginationConfig.properties"
* @return java.util.Properties
*/
private Properties getProperties(String propertyFilePath) {
Properties properties = new Properties();
InputStream is = null;
try {
is = RWProperties.class.getClassLoader().getResourceAsStream(
propertyFilePath);

properties.load(is);
} catch (NullPointerException e) {
e.printStackTrace();
close();
} catch (IOException e) {
e.printStackTrace();
close();
} finally {
if (is != null) {
try {
is.close();
} catch (IOException e) {
e.printStackTrace();
} finally {
is = null;
}
}
}

return properties;
}

/**
* 返回已经加载了配置文件的文件输出流
*
* @param propertyFilePath
* 属性配置文件的完整路径,
* 如:"com/pagination/config/PaginationConfig.properties"
* @return java.io.FileOutputStream
*/
private FileOutputStream getFileOutputStream(String propertyFilePath) {
FileOutputStream fos = null;
String filePath = null;

filePath = RWProperties.class.getClassLoader().getResource(
propertyFilePath).getFile();
filePath = filePath.replaceFirst("/", "");
// 如果URL地址中含有空格,则空格会被"%20"替换,所以要将它替换回来
filePath = filePath.replaceAll("%20", " ");
try {
fos = new FileOutputStream(filePath);
} catch (FileNotFoundException e) {
e.printStackTrace();
close();
}

return fos;
}
}

相关推荐
程序员的必经之路! 【限时优惠】 现在下单,还享四重好礼: 1、教学课件免费下载 2、课程案例代码免费下载 3、专属VIP学员群免费答疑 4、下单还送800元编程大礼包 【超实用课程内容】  根据《2019-2020年中国开发者调查报告》显示,超83%的开发者都在使用MySQL数据库。使用量大同时,掌握MySQL早已是运维、DBA的必备技能,甚至部分IT开发岗位也要求对数据库使用和原理有深入的了解和掌握。 学习编程,你可能会犹豫选择 C++ 还是 Java;入门数据科学,你可能会纠结于选择 Python 还是 R;但无论如何, MySQL 都是 IT 从业人员不可或缺的技能!   套餐中一共包含2门MySQL数据库必学的核心课程(共98课时)   课程1:《MySQL数据库从入门到实战应用》   课程2:《高性能MySQL实战课》   【哪些人适合学习这门课程?】  1)平时只接触了语言基础,并未学习任何数据库知识的人;  2)对MySQL掌握程度薄弱的人,课程可以让你更好发挥MySQL最佳性能; 3)想修炼更好的MySQL内功,工作中遇到高并发场景可以游刃有余; 4)被面试官打破沙锅问到底的问题问到怀疑人生的应聘者。 【课程主要讲哪些内容?】 课程一:《MySQL数据库从入门到实战应用》 主要从基础篇,SQL语言篇、MySQL进阶篇三个角度展开讲解,帮助大家更加高效的管理MySQL数据库。 课程二:《高性能MySQL实战课》主要从高可用篇、MySQL8.0新特性篇,性能优化篇,面试篇四个角度展开讲解,帮助大家发挥MySQL的最佳性能的优化方法,掌握如何处理海量业务数据和高并发请求 【你能收获到什么?】  1.基础再提高,针对MySQL核心知识点学透,用对; 2.能力再提高,日常工作中的代码换新貌,不怕问题; 3.面试再加分,巴不得面试官打破沙锅问到底,竞争力MAX。 【课程如何观看?】  1、登录CSDN学院 APP 在我的课程中进行学习; 2、移动端:CSDN 学院APP(注意不是CSDN APP哦)  本课程为录播课,课程永久有效观看时长 【资料开放】 课件、课程案例代码完全开放给你,你可以根据所学知识,自行修改、优化。  下载方式:电脑登录课程观看页面,点击右侧课件,可进行课程资料的打包下载。
©️2020 CSDN 皮肤主题: 深蓝海洋 设计师:CSDN官方博客 返回首页