版权声明:本文为博主原创文章,转载请注明出处:http://blog.csdn.net/sinat_34820292 https://blog.csdn.net/sinat_34820292/article/details/80794655
解析ini配置文件,ini配置文件格式如下:
分为小节:[section]
键值对: key=value
package com.cdr.printer.view;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import com.alibaba.fastjson.JSON;
public class ConfigIni {
public static String defalutSection = "12345678";
public Map<String, Map<String,String>> map = new HashMap<String, Map<String,String>>();
File fi = new File("file\\config.ini");
public ConfigIni(String file) {
this(new File(file));
}
public ConfigIni(File file) {
this();
fi=file;
}
public ConfigIni() {
super();
// System.out.println("初始化完成");
}
// 是否为一个session
private boolean isSection(String str) {
return Pattern.matches("^\\s*\\[.+\\]\\s*$", str);
}
// 是否是key-value
private boolean isKeyValue(String str) {
return Pattern.matches(".*=.*", str);
}
// 是否为有注释 ;
private boolean haveComment(String str) {
return Pattern.matches(";", str);
}
// 获得section
private String getSection(String line) {
String pattern = "\\[(.+)\\]";
Pattern r = Pattern.compile(pattern);
Matcher m = r.matcher(line);
if (m.find()) {
return m.group(1).trim();
}else {
return null;
}
}
// 获得key
private String getKey(String line) {
String pattern = "(.+)=.*";
Pattern r = Pattern.compile(pattern);
Matcher m = r.matcher(line);
if (m.find()) {
return m.group(1).trim();
}else {
return null;
}
}
// 获得value
private String getValue(String line) {
String pattern = ".+=(.*)";
Pattern r = Pattern.compile(pattern);
Matcher m = r.matcher(line);
if (m.find()) {
return m.group(1).trim();
}else {
return null;
}
}
// 加载配置
private Map initIni() {
SymmetricEncoder se=new SymmetricEncoder(); // AES对称加密类,不详细解释
try {
if(!fi.exists()) {
if(!fi.getParentFile().exists())
fi.getParentFile().mkdirs();
fi.createNewFile();
}
BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(fi),"UTF-8"));
String line = null;
String sstr = defalutSection;
Map<String, String> sesion = new HashMap<String,String>();
map.put(sstr, sesion);
while ((line = br.readLine()) != null) {
line = se.AESDncode(defalutSection, line);// 这里实际不需要,后来加上的,存到文件里的是加密后的
if(isSection(line)) {
sstr = getSection(line);
sesion = new HashMap<String,String>();
map.put(sstr, sesion);
}else if(isKeyValue(line)) {
sesion.put(getKey(line), getValue(line)); // 这里实际不需要,后来加上的,存到文件里的是加密后的
}
}
br.close();
} catch (Exception e) {
System.err.println("read errors :" + e);
}
// System.out.println(JSON.toJSONString(map));
return map;
}
// 写配置
private String saveToIni() {
SymmetricEncoder se=new SymmetricEncoder(); // AES加密类
try {
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(fi), "UTF-8"));
for (String name : map.keySet()) {
if(!name.equals(defalutSection)) {
String str = se.AESEncode(defalutSection, "["+name + "]"); // 这里实际不需要,后来加上的,存到文件里的是加密后的
bw.write(str);
bw.newLine();
}
Map topic = map.get(name);
Set<String> keySet = topic.keySet();
for(String ke : keySet) {
String str = se.AESEncode(defalutSection, ke + "=" +topic.get(ke)); // 这里实际不需要,后来加上的,存到文件里的是加密后的
bw.write(str);
bw.newLine();
}
bw.newLine();
}
bw.close();
} catch (Exception e) {
System.err.println("write errors :" + e);
}
return "";
}
// 获取配置值
public String get(String topic,String key,String dft) {
Map<String, String> tt = map.get(topic);
if(tt==null) return dft;
String string = tt.get(key);
return string==null?dft:string;
}
// 设置值
public String set(String topic,String key,String value) {
Map<String, String> tt = map.get(topic);
if(tt==null) {
tt = new HashMap<String,String>();
map.put(topic, tt);
}
tt.replace(key, value);
return tt.put(key, value);
}
// key value存储
public String kv(String key,String value) {
initIni();
return map.get(defalutSection).put(key, value) + saveToIni();
}
public String kv(String key) {
initIni();
return map.get(defalutSection).get(key);
}
public static void main(String[] args) {
System.out.println(new ConfigIni().kv("1651"));
}
}
此处省略加密解密类的具体实现,有兴趣可参考其他博主的文章:
aes加密算法java代码实现
AES对称加密(Rijndael算法)
java实现AES加密解密–数据加解密