java 顺序 读写 Properties 配置文件 支持中文 不乱码

时间:2023-01-11 15:58:33

java 顺序 读写 Properties 配置文件 ,java默认提供的Properties API 继承hashmap ,不是顺序读写的。

特从网上查资料,顺序读写的代码,如下,

import java.util.Collections;
import java.util.Enumeration;
import java.util.LinkedHashSet;
import java.util.Properties;
import java.util.Set;

public class OrderedProperties extends Properties {
private static final long serialVersionUID = -4627607243846121965L;
private final LinkedHashSet<Object> keys = new LinkedHashSet<Object>();

public Enumeration<Object> keys() {
return Collections.<Object> enumeration(keys);
}

public Object put(Object key, Object value) {
keys.add(key);
return super.put(key, value);
}

public synchronized Object remove(Object key) {
keys.remove(key);
return super.remove(key);
}

public Set<Object> keySet() {
return keys;
}

public Set<String> stringPropertyNames() {
Set
<String> set = new LinkedHashSet<String>();
for (Object key : this.keys) {
set.add((String) key);
}
return set;

}
}
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.util.Properties;

public class PropertiesTest {

public static void main(String[] args) {
String readfile
= "D:/eclipseworkspace/test/src/test.txt";
Properties pro
= readPropertiesFileObj(readfile); // 读取properties文件
System.out.println(pro.getProperty("password0.9271224287974811"));
pro.remove(
"password0.008229652622303574");
writePropertiesFileObj(readfile, pro);
// 写properties文件
}

// 读取资源文件,并处理中文乱码
public static Properties readPropertiesFileObj(String filename) {
Properties properties
= new OrderedProperties();
try {
InputStream inputStream
= new FileInputStream(filename);
BufferedReader bf
= new BufferedReader(new InputStreamReader(inputStream, "utf-8"));
properties.load(bf);
inputStream.close();
// 关闭流
} catch (IOException e) {
e.printStackTrace();
}
return properties;
}

// 写资源文件,含中文
public static void writePropertiesFileObj(String filename, Properties properties) {
if (properties == null) {
properties
= new OrderedProperties();
}
try {
OutputStream outputStream
= new FileOutputStream(filename);
BufferedWriter bw
= new BufferedWriter(new OutputStreamWriter(outputStream, "utf-8"));
properties.setProperty(
"username" + Math.random(), "myname");
properties.setProperty(
"password" + Math.random(), "mypassword");
properties.setProperty(
"chinese" + Math.random(), "中文");
properties.store(bw,
null);
outputStream.close();
}
catch (IOException e) {
e.printStackTrace();
}
}
}