#ini简介

ini格式配置文件,这种配置文件在win系统上很常见.
还有git的配置文件也很类似ini的,不过还是不太一样的.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
[repo]
GIT_ANDROID_ROOT=git/android/
REPO_MANIFEST_ADDR=ssh://gerrit.mage.com:29418/git/android/platform/manifest
REPO_MANIFEST_BRANCH=mage_master
REPO_MANIFEST_FILE=mage/default.xml
REPO_MIRROR=/home/mirror
REPO_GROUP=
REPO_GROUP_AMSS=mage_amss,mage_common
REPO_GROUP_ANDROID=all,-mage_amss

[build]
SOC_NAME=
ANDROID_TARGET_PRODUCT_LIST=mage
ANDROID_BUILD_VARIANT_LIST=userdebug,user,eng
ANDROID_TARGET_CARRIER_LIST=eu
ANDROID_BUILD_TYPE=release
ANDROID_EXTRA_BUILD_STEPS=
ANDROID_EXTRA_BUILD_STEPS=
ANDROID_EXTRA_BUILD_COMBINATION=
ANNOUNCE_LIST=

在java中我们可以使用 init4j 这个模块来解析ini文件

1
2
3
4
5
6
maven的依赖坐标
<dependency>
<groupId>org.ini4j</groupId>
<artifactId>ini4j</artifactId>
<version>0.5.2</version>
</dependency>

这里主要介绍一下ConfigParser这个,这个和python中的ConfigParser很类似的.

读取ini文件,直接调用ConfigParser 中的read 方法,读取之后 就可以使用 ConfigParser 中的get方法来获取对应的值了.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
try {
ConfigParser config = new ConfigParser();
config.read(cf.toFile());
if (!config.hasSection(secn))
return;

List<Map.Entry<String, String>> items = config.items(secn);
for (Map.Entry<String, String> item : items) {
System.out.println(item.getKey() + " = " + item.getValue());
}//end for
} catch (Exception e) {
e.printStackTrace();
}

写入也是先调用ConfigParser 的read,然后调用 ConfigParser 的 set 方法这是相应的section的相应的key对应的值.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19

try {
ConfigParser config = new ConfigParser();
config.read(cf.toFile());

if (!config.hasSection(buildSectionName)) {
config.addSection(buildSectionName);
}
for (Map.Entry<String, String> entry : map.entrySet()) {
String value = entry.getValue();
String key = entry.getKey();
// 这里保存的时候要把key都变为小写字母
config.set(buildSectionName, key.toLowerCase(), value);
}
config.write(cf.toFile());
} catch (Exception e) {
e.printStackTrace();
}

1
2
3
4
5
6
7
8
9
//这个方法就是设置相应的section下的相应的key对应的value值
public void set(String sectionName, String optionName, Object value) throws NoSectionException

//这个方法就是获取相应的section下的相应的key对应的值.
public String get(String section, String option) throws NoSectionException, NoOptionException, InterpolationException

例如上面例子中ini配置文件,获取repo下面的REPO_MANIFEST_ADDR的值可以这样:
get("repo", "REPO_MANIFEST_ADDR")

除了直接用ConfigParser 类,还可以直接使用Ini这个类.用法都是比较简单的.