开发程序需要操作 ini 文件,发现内建库没有对应对象,无奈之下自己捣鼓一个吧。。。
通过 Map<String, String> 保存用户设置参数
class IniFileSection{
private Map<String, String> items;
public IniFileSection(){
items = new HashMap<String, String>();
}
public void SetValue(String key, String value){
items.put(key, value);
}
public void RemoveValue(String key){
items.remove(key);
}
public String GetValue(String key){
return items.get(key);
}
public Map<String, String> GetValues(){
return items;
}
}通过 Map<String, IniFileSection> 保存多段用户设置参数集合
无 section 的用户设置参数会存到 sectionKey 为空的特殊 section 里面
public class IniFile{
private String fileAbsPath;
private String lastErrorMessage;
private FileOutputStream fileWriter;
private FileInputStream fileReader;
private Map<String, IniFileSection> sections;
public IniFile(String uFileAbsPath){
fileAbsPath = uFileAbsPath;
lastErrorMessage = "";
sections = new HashMap<String, IniFileSection>();
}
public void SetValue(String sectionKey, String key, String value){
IniFileSection section;
// get section
section = sections.get(sectionKey);
if(section == null){
section = new IniFileSection();
sections.put(sectionKey, section);
}
// set value
section.SetValue(key, value);
}
public void RemoveValue(String sectionKey, String key, String value){
IniFileSection section;
// get section
section = sections.get(sectionKey);
if(section == null){
section = new IniFileSection();
sections.put(sectionKey, section);
}
// set value
section.RemoveValue(key);
}
public String GetValue(String sectionKey, String key){
IniFileSection section;
String value;
// get section
section = sections.get(sectionKey);
// get value
if(section != null){
value = section.GetValue(key);
return value;
}
return null;
}
public void Load(){
try{
BufferedReader reader = new BufferedReader(new FileReader(fileAbsPath));
String line;
String secionKey;
IniFileSection section;
section = new IniFileSection();
sections.put("", section);
while((line = reader.readLine()) != null){
line = line.trim();
if (line.matches("\\[.*\\]") == true) {
secionKey = line.replaceFirst("\\[(.*)\\]", "$1");
section = new IniFileSection();
sections.put(secionKey, section);
}
else if (line.matches(".*=.*") == true) {
if (section != null) {
int i = line.indexOf('=');
String name = line.substring(0, i);
String value = line.substring(i + 1);
section.SetValue(name, value);
}
}
}
reader.close();
}
catch (Exception e){
lastErrorMessage = e.getMessage();
}
}
public void Save(){
try {
fileWriter = new FileOutputStream(fileAbsPath);
String line;
for (Map.Entry<String, IniFileSection> entry : sections.entrySet()) {
line = String.format("[%s]", entry.getKey()) + "\n";
fileWriter.write(line.getBytes());
IniFileSection section = entry.getValue();
for (Map.Entry<String, String> subEntry : section.GetValues().entrySet()) {
line = String.format("%s=%s", subEntry.getKey(), subEntry.getValue()) + "\n";
fileWriter.write(line.getBytes());
}
}
fileWriter.flush();
fileWriter.close();
}
catch (Exception e){
lastErrorMessage = e.getMessage();
}
}
public String GetLastError(){
return lastErrorMessage;
}
}主要就是通过 IO 的读写操作和两个 Map 结构完成了对 ini 文件的读写操作