xxx.ini文件解析
简介
基于commons-configuration2对xxx.ini文件进行解析与修改操作
xxx.ini文件格式示例
.ini文件是一种常见的配置文件格式,用于存储程序的配置信息,它通常包含键值对,组织成不同的节(section)
[sectionName1]
key1 = value1
key2 = value2
...
[sectionName2]
keyn = valuen
keym = valuem
...
- 节(section):用方括号包起来的部分。例如 [sectionName]
- 键值对:节下面每行一个键值对,用“=”分隔,格式为key = value。
代码示例
项目关键依赖
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-configuration2</artifactId>
<version>2.11.0</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.14.0</version>
</dependency>
commons-configuration2依赖commons-lang3 版本3.14.0,commons-lang3在3.14.0删除了isAllBlank()、isAllEmpty()以及isAnyEquals()等方法,如果项目中commons-lang3版本较低,需要进行适配修改
xxx.ini文件解析
File iniFile = new File("**\xxx.ini");
// 创建INI配置对象
INIConfiguration config = new INIConfiguration();
try {
// 加载配置文件
FileHandler fileHandler = new FileHandler(config);
fileHandler.load(iniFile);
// 获取所有的节
Set<String> sections = config.getSections()
// 获取指定节的配置对象
SubnodeConfiguration sectionConfig = config.getSection("sectionName");
// 根据节获取指定键的value值
Object obj = sectionConfig.getProperty("key");
String strValue = sectionConfig.getString("strkey");
int intValue = sectionConfig.getInt("intKey");
// 根据配置对象获取指定节下键的value值
Object obj = config.getProperty("sectionName.key");
// 在指定节下更新键值对或者插入键值对信息
subConfig.setProperty("key","value");
config.setProperty("sectionName.key","value");
// 保存修改内容
fileHandler.save(iniFile);
} catch (ConfigurationException e) {
e.printStackTrace();
}
xxx.ini解析工具类
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.configuration2.INIConfiguration;
import org.apache.commons.configuration2.SubnodeConfiguration;
import org.apache.commons.configuration2.ex.ConfigurationException;
import org.apache.commons.configuration2.io.FileHandler;
import java.io.File;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
/**
* xxx.ini文件解析工具类
* 基于commons-configuration2解析
*/
@Slf4j
public class IniUtils {
private final File iniFile;
private final INIConfiguration iniConfiguration;
private final FileHandler fileHandler;
private final Map<String, SubnodeConfiguration> sectionConfigMap = new HashMap<>();
public IniUtils(String iniFilePath) {
this(new File(iniFilePath));
}
public IniUtils(File iniFile) {
if (iniFile == null || !iniFile.exists()) {
throw new BusinessException("ini file not exist");
}
this.iniFile = iniFile;
this.iniConfiguration = new INIConfiguration();
this.fileHandler = new FileHandler(iniConfiguration);
try {
fileHandler.load(iniFile);
Set<String> sections = iniConfiguration.getSections();
for (String section : sections) {
SubnodeConfiguration subnodeConfiguration = iniConfiguration.getSection(section);
sectionConfigMap.put(section, subnodeConfiguration);
}
} catch (ConfigurationException e) {
log.error(".ini文件解析失败", e);
throw new IniParseException("ini file parsing error");
}
}
public Set<String> getSections() {
return sectionConfigMap.keySet();
}
/**
* 获取指定section的配置信息
*
* @param sectionName section名称
* @return SubnodeConfiguration
*/
public SubnodeConfiguration getSubnodeConfiguration(String sectionName) {
return sectionConfigMap.get(sectionName);
}
/**
* 获取指定节(section)中的属性值
*
* @param sectionName 节名称
* @param key 属性键名
* @return 属性值
*/
public Object getProperty(String sectionName, String key) {
SubnodeConfiguration subnodeConfiguration = sectionConfigMap.get(sectionName);
if (subnodeConfiguration == null) {
e.printStackTrace();
}
return subnodeConfiguration.getProperty(key);
}
/**
* 获取指定节(section)中的字符串值
*
* @param sectionName 节名称
* @param key 属性键名
* @return 指定键的字符串值
*/
public String getString(String sectionName, String key) {
SubnodeConfiguration subnodeConfiguration = sectionConfigMap.get(sectionName);
if (subnodeConfiguration == null) {
throw new BusinessException("section not exist");
}
return subnodeConfiguration.getString(key);
}
/**
* 获取指定配置节点中指定键的整数值
*
* @param sectionName 节名称
* @param key 属性键名
* @return 指定键的整数值
*/
public int getInt(String sectionName, String key) {
SubnodeConfiguration subnodeConfiguration = sectionConfigMap.get(sectionName);
if (subnodeConfiguration == null) {
e.printStackTrace();
}
return subnodeConfiguration.getInt(key);
}
/**
* 设置属性值
*
* @param sectionName 节名称
* @param key 属性键名
* @param value 属性值
*/
public void setProperty(String sectionName, String key, Object value) {
SubnodeConfiguration subnodeConfiguration = sectionConfigMap.get(sectionName);
if (subnodeConfiguration == null) {
iniConfiguration.setProperty(sectionName + "." + key, value);
} else {
subnodeConfiguration.setProperty(key, value);
}
try {
fileHandler.save(iniFile);
} catch (ConfigurationException e) {
log.error("保存ini文件失败", e);
e.printStackTrace();
}
}
}