-
java操作properties文件的工具类简单封装:
注意:由于本地和环境和linux服务的路径有区别,或者jetty,resin,tomcat部署后,文件的路径也是有区别的。比如我们在linux上把项目放在另一个磁盘下,此时,文件的路径就是项目所在的路径,而不是WEB-INF下,所以,这里需要灵活配置!
-
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270
package
com.sohu.util;
import
java.io.BufferedInputStream;
import
java.io.File;
import
java.io.FileInputStream;
import
java.io.FileNotFoundException;
import
java.io.FileOutputStream;
import
java.io.IOException;
import
java.io.InputStream;
import
java.util.Enumeration;
import
java.util.HashMap;
import
java.util.Map;
import
java.util.Map.Entry;
import
java.util.Properties;
import
java.util.Set;
import
org.springframework.core.io.ClassPathResource;
/**
* 测试properties读写处理
* @author liweihan ()
* @version 1.0 (2015年1月6日 下午2:23:27)
*/
public
class
TestProperties {
/**
* 说明:很多时候我们为了减轻数据库的压力,或者减少我们的服务的压力。
* 对于不经常变的数据,我们可以放在配置文件中!
*
*
* containsKey()
*
*/
private
static
String PFILE =
null
;
public
static
final
boolean
OS_LINUX =
"/"
.equals(File.separator);
static
{
Properties p =
new
Properties();
try
{
if
(OS_LINUX) {
//方法1:
//p.load(TestProperties.class.getClassLoader().getResourceAsStream("config.properties"));
//方法2:还可以用这个方法加载
p.load(
new
ClassPathResource(
"config.properties"
).getInputStream());
//方法3:--应该用在具体路径的地方
// InputStream in = new BufferedInputStream(new FileInputStream("config.properties"));
// p.load(in);
}
else
{
//方法1:
//p.load(TestProperties.class.getClassLoader().getResourceAsStream("config-windows.properties"));
//方法2:
p.load(
new
ClassPathResource(
"config-windows.properties"
).getInputStream());
//方法3:---应该用在具体路径的地方
// InputStream in = new BufferedInputStream(new FileInputStream("config-windows.properties"));
// p.load(in);
}
PFILE = p.getProperty(
"goodsongPath"
).trim();
}
catch
(IOException e) {
e.printStackTrace();
}
}
//属性文件全名
// private static final String PFILE = "D:\\liweiSohu\\workspaceForEclipse\\R20141229_han\\search-star-HDSS-STAR-WEB-F\\src\\main\\resources\\goodsong.properties";
//上面是windows系统本地测试,下面是linux系统
// private static final String PFILE = System.getProperty("user.dir") + File.separator + "goodsong.properties";
//对应于属性文件的文件对象变量
private
File m_file =
null
;
//属性文件的最后修改日期
private
long
m_lastModifiedTime =
0
;
//属性文件所对应的属性对象变量
private
Properties m_props =
null
;
//本类可能存在的唯一的唯一实例
private
static
TestProperties m_instance =
new
TestProperties();
/**
* 私有构造方法,用以保证外界无法直接实例化
*/
private
TestProperties() {
m_file =
new
File(PFILE);
m_lastModifiedTime = m_file.lastModified();
if
(m_lastModifiedTime ==
0
) {
System.err.println(PFILE +
" file does not exist !"
);
}
m_props =
new
Properties();
try
{
m_props.load(
new
FileInputStream(PFILE));
}
catch
(Exception e) {
e.printStackTrace();
}
}
/**
* 返回单一实例
* @return
*
* 2015年1月6日 下午2:58:02
* liweihan
*/
public
static
synchronized
TestProperties getInstance() {
System.out.println(
" ---- :"
+ System.getProperty(
"user.dir"
));
return
m_instance;
}
/**
* 读取一特定的属性项
* @param name 属性项的项名
* @param defaultVal 属性项的默认值
* @return 属性项的值(如果此项存在),默认值(如此项不存在)
*
* 2015年1月6日 下午3:01:05
* liweihan
*/
public
Object getConfigItem(String name,Object defaultVal) {
long
newTime = m_file.lastModified();
//检查属性文件是否被其他的程序修改过,如果是,重读此配置文件
if
(newTime ==
0
) {
//属性文件不存在
if
(m_lastModifiedTime ==
0
) {
System.err.println(PFILE +
" file does not exist !"
);
}
else
{
System.err.println(PFILE +
" file was deleted !"
);
}
return
defaultVal;
}
else
if
(newTime > m_lastModifiedTime) {
//属性文件被修改过,重新加载配置文件
m_props.clear();
try
{
m_props.load(
new
FileInputStream(PFILE));
}
catch
(Exception e) {
e.printStackTrace();
}
}
m_lastModifiedTime = newTime;
Object val = m_props.getProperty(name);
if
(val ==
null
) {
return
defaultVal;
}
else
{
return
val;
}
}
/**
* 根据指定的属性名获得属性值
* @param itemName
* @return
*
* 2015年1月6日 下午3:39:55
* liweihan
*/
public
String getValue(String itemName) {
return
m_props.getProperty(itemName);
}
/**
* 设置属性名和属性值[此设置并不能保存到配置文件中]
* @param itemName
* @param value
*
* 2015年1月6日 下午3:45:08
* liweihan
*/
public
void
setValue(String itemName,String value) {
m_props.setProperty(itemName, value);
return
;
}
/**
* 保存配置文件,指定文件名和抬头描述
* @param fileName
* @param description
*
* 2015年1月6日 下午3:56:09
* liweihan
* @throws Exception
*/
public
void
saveFile(String fileName,String description)
throws
Exception {
try
{
FileOutputStream fout =
new
FileOutputStream(fileName);
m_props.store(fout, description);
//保存文件
fout.close();
}
catch
(Exception e) {
System.out.println(
"无法保存指定的配置文件:"
+ fileName);
throw
new
Exception(
"无法保存指定的配置文件:"
+ fileName);
// e.printStackTrace();
}
}
/**
* 保存指定的配置文件
* @param fileName
*
* 2015年1月6日 下午3:59:04
* liweihan
* @throws Exception
*/
public
void
saveFile(String fileName)
throws
Exception {
saveFile(fileName,
""
);
}
/**
* 保存指定文件,采用原有名字
*
*
* 2015年1月6日 下午4:01:49
* liweihan
*/
public
void
saveFile()
throws
Exception{
if
(PFILE.length() ==
0
) {
throw
new
Exception(PFILE +
" file does not exist !"
);
}
saveFile(PFILE);
}
/**
* 得到配置文件中所有的key和value值,并放在一个map结合中
* @return
*
* 2015年1月6日 下午4:50:39
* liweihan
*/
public
Map<String, String> getAllKeyAndValue() {
Map<String, String> map =
new
HashMap<String, String>();
Enumeration en = m_props.propertyNames();
//遍历
while
(en.hasMoreElements()) {
String key = en.nextElement().toString();
//key值
String value = m_props.getProperty(key);
map.put(key, value);
}
return
map;
}
/**
* 得到配置文件中所有的key和value值,并放在一个map结合中2
* @return
*
* 2015年1月7日 下午6:33:41
* liweihan
*/
public
Map<String, String> getAllKeyAndValue2() {
Map<String, String> map =
new
HashMap<String, String>();
m_props.list(System.out);
Object[] objs = m_props.keySet().toArray();
for
(
int
i =
0
; i < objs.length; i++) {
map.put(objs[i].toString(), m_props.get(objs[i]).toString());
}
return
map;
}
public
static
void
main(String[] args) {
//1.获得java虚拟机的参数
Properties pps = System.getProperties();
pps.list(System.out);
}
}
3.测试代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
TestProperties p = TestProperties.getInstance();
String result = (String)p.getConfigItem(sid, "0" );
System.out.println( "result:" + result);
String result2 = p.getValue(sid);
System.out.println( "result2: " + result2);
/* p.setValue("54418", "hanchao"); p.setValue("20", "cc");*/
p.setValue(key != null ? key : "0" , value != null ? value : "0" );
try {
// p.saveFile("system.conf","System.Global.Configuration"); p.saveFile();
if (key != null && value != null ) {
setStarIdAndSpaceIdToLocalCache();
}
} catch (Exception e) {
e.printStackTrace();
}
Map<String, String> map = p.getAllKeyAndValue2();
for (Entry<String, String> en : map.entrySet()) {
System.out.println( "key:" + en.getKey() + ", value :" + en.getValue());
}
|
* http://wenku.baidu.com/view/bbe96f6e25c52cc58bd6be99.html
* http://www.cnblogs.com/bakari/p/3562244.html
*
* 加载的六种方法:
* http://blog.csdn.net/Senton/article/details/4083127
本文转自韩立伟 51CTO博客,原文链接:http://blog.51cto.com/hanchaohan/1600546,如需转载请自行联系原作者