65.9K
CodeProject 正在变化。 阅读更多。
Home

Java 的增强型 INI 文件类

starIconstarIconstarIcon
emptyStarIcon
starIcon
emptyStarIcon

3.35/5 (22投票s)

2004年7月7日

CPOL

3分钟阅读

viewsIcon

214084

downloadIcon

3650

支持环境变量的 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 日 - 修复了一个问题和新功能。
© . All rights reserved.