Java 的增强型 INI 文件类






3.35/5 (22投票s)
支持环境变量的 INI 文件处理类
引言
本文介绍一个用于读取和写入 Windows INI 文件的 Java 类。这个类的一个优秀特性是它支持环境变量,也就是说,这个类允许我们在 INI 文件中定义值时包含对环境变量的引用。以下代码片段描述了此功能
;Sample INI file
[Database]
UserId = DBuser
Sid = DBSid
DBHost = 145.101.56.32
DBPort = 1521
DBLib = %ORACLE_HOME%\lib\classes12.jar
当读取 DBLib
变量时,该类将尝试检索 %ORACLE_HOME%
变量的值。 假设在您的系统上,%ORACLE_HOME%
指向 C:\Oracle 目录,那么 DBLib
将扩展为 C:\Oracle\lib\classes12.jar。
Using the Code
以下代码片段展示了该类的用法。 相同的代码也可以在 INIFile
类的 main
方法中找到。
public static void main(String[] pstrArgs)
{
INIFile objINI = null;
String strFile = null;
if (pstrArgs.length == 0) return;
strFile = pstrArgs[0];
/* Following call loads the strFile if it exists. */
objINI = new INIFile(strFile);
objINI.setStringProperty("Database", "SID", "ORCL", "Database SID");
objINI.setStringProperty("Database", "UserId", "System", "User Id");
objINI.setStringProperty("Database", "Password", "Manager", "Password");
objINI.setStringProperty("Database", "HostName", "DBServer", "Server Host");
objINI.setIntegerProperty("Database", "Port", 1521, "Server Port");
/* Save changes back to strFile */
objINI.save();
objINI = null;
}
日期和时间戳的使用
由于 INI 文件中的所有数据都存储为 string
,因此该类提供了以下方法来以正确的方式解释日期和时间戳值。
setDateFormat
- 此方法允许设置在将日期string
转换为日期数据类型以及 vice versa 时使用的日期格式。setTimeFormat
- 此方法允许设置在将时间戳字符串转换为时间戳数据类型以及 vice versa 时使用的时间戳格式。
关于支持的日期时间格式,请参考 java.text.SimpleDateFormat。
方法摘要
该类公开以下 public
方法来访问 INI 属性值。所有这些方法都需要将 INI 节名称和属性名称作为输入参数传递。
getBooleanProperty
- 返回boolean
值getStringProperty
- 返回string
值getIntegerProperty
- 返回int
值getLongProperty
- 返回long
值getDoubleProperty
- 返回double
值getDateProperty
- 返回java.util.Date
值getTimestampProperty
- 返回java.sql.Timestamp
值
此外,该类还提供了以下附加方法来检索 INI 文件中所有存在的节的名称、特定节下所有存在的属性的名称、删除属性、删除节,并将更改保存回磁盘。 load 方法会自动从构造函数调用。
getAllSectionNames
- 返回节名称的string
数组getAllPropertyNames
- 返回节名称的string
数组。此方法需要一个节名称作为输入参数。removeProperty
- 从指定的节中删除指定的属性removeSection
- 删除指定的节save
- 将更改持久化回 INI 文件
希望这对任何需要此 Java 功能的人有所帮助。
已知限制
该类不支持跨越多行的属性值。 不支持一个节中的重复属性。 最后一个属性值将覆盖先前的值。
关注点
JDK 1.3 和 1.4 没有内置的类和/或方法来访问环境变量的值。感谢 Réal Gagnon 先生慷慨地提供代码以读取环境变量。
历史
- 2004 年 7 月 1 日 - 初始发布
- 2004 年 7 月 7 日 - 添加了对环境变量和特定数据类型 getter 和 setter 的支持
- 2004 年 7 月 8 日 - 代码更正,主要是拼写错误和
getStringProperty
方法中的一个条件 - 2004 年 8 月 26 日 - 许多有用的修改
- 添加了对节和属性级注释的支持
- 引入了一个单独的类来表示属性
- 添加了创建命名节的方法
- 将
HashMap
更改为LinkedHashMap
,节/属性现在保留它们的顺序 - 一些方法实现/签名已更改
- 2015 年 6 月 15 日 - 现在需要 JDK 6 及以上
- 节和属性名称现在不区分大小写
- 重复的属性名称被正确处理,最后一个值覆盖前一个值
- 环境变量现在使用
System.getEnv()
获取
- 2015 年 6 月 23 日 - 修复了注释未正确保存的问题
- 2017 年 2 月 21 日 - 修复了一个问题和新功能。
- 根据 Marlys.Jeevana 的要求,添加了通过流进行原始字符串输入的支持
- 修复了 Member 10074061 报告的问题