2

我在使用 Apache commons 配置读取 ini 文件时遇到问题。我附上了进口商品,以防我遗漏了一些东西。下面是我在 stackoverflow 上找到的一个示例,据我所知,没有其他示例可供查看。问题是iniObj。使用 Eclipse,它以红色突出显示。

如果我初始化变量,new "HierarchicalINIConfiguration(iniFile);生气并想添加一个 try/catch 或 throws ......这应该没问题......但是 try/catch 或 throws 生气并说“不能抛出 ConfigurationException 类型的异常; 异常类型必须是 Throwable 的子类。”

这让我想到了这个问题。我添加了 commons lang 3.1。我有 commons config 1.9,commons collections 3.2.1。公共日志记录 1.1.1 也是如此。我也用 commons config 1.8 和 lang 2.6 试过这个。现在我收到一个新错误“com.toolbox.dev.ReadIni.main(ReadIni.java:28) 处的线程“main”java.lang.NullPointerException 中的异常”您可以在我尝试进行调整后看到下面的新代码并解决错误。

我的代码:

import java.util.Iterator;
import java.util.Set;

import org.apache.commons.configuration.ConfigurationException;
import org.apache.commons.configuration.HierarchicalINIConfiguration;
import org.apache.commons.configuration.SubnodeConfiguration;

public static void main(String[] args) throws ConfigurationException {
    String iniFile = "file.ini";
    HierarchicalINIConfiguration iniConfObj = new HierarchicalINIConfiguration(iniFile);

    // Get Section names in ini file
    Set setOfSections = iniConfObj.getSections();
    Iterator sectionNames = setOfSections.iterator();

    while(sectionNames.hasNext()) {
        String sectionName = sectionNames.next().toString();

        HierarchicalINIConfiguration iniObj = null;
        SubnodeConfiguration sObj = iniObj.getSection(sectionName);
        Iterator it1 = sObj.getKeys();

        while (it1.hasNext()) {
            // Get element
            Object key = it1.next();
            System.out.print("Key " + key.toString() +  " Value " +
              sObj.getString(key.toString()) + "\n");
        }
    }
}

堆栈溢出的原始代码:

import java.util.Iterator;
import java.util.Set;

import org.apache.commons.configuration.HierarchicalINIConfiguration;
import org.apache.commons.configuration.SubnodeConfiguration;


public class ReadIni {

    public static void main(String[] args) {
        String iniFile = "";
        HierarchicalINIConfiguration iniConfObj = new HierarchicalINIConfiguration(iniFile);

        // Get Section names in ini file
        Set setOfSections = iniConfObj.getSections(); 
        Iterator sectionNames = setOfSections.iterator(); 

        while(sectionNames.hasNext()) {

            String sectionName = sectionNames.next().toString();
            SubnodeConfiguration sObj = iniObj.getSection(sectionName);
            Iterator it1 = sObj.getKeys();

            while (it1.hasNext()) {
                // Get element 
                Object key = it1.next(); 
                System.out.print("Key " + key.toString() +  " Value " +
                  sObj.getString(key.toString()) + "\n");
            }
        }
4

3 回答 3

1

这看起来不太乐观?

HierarchicalINIConfiguration iniObj = null;
SubnodeConfiguration sObj = iniObj.getSection(sectionName); 

这是第 28 行吗?

于 2012-10-17T14:50:57.547 回答
1

由于您已经将HierarchicalINIConfiguration(“main”中的第二行)初始化为:

   HierarchicalINIConfiguration iniConfObj = new HierarchicalINIConfiguration(iniFile);

我相信您想HierarchicalINIConfiguration iniObj = null;从代码中删除(大约 5 行)并更改

  SubnodeConfiguration sObj = iniObj.getSection(sectionName); 

to(iniConfObj代替iniObj

   SubnodeConfiguration sObj = iniConfObj.getSection(sectionName); 
于 2012-10-17T14:59:37.483 回答
0

你可以试试 JINIFile。是来自 Delphi 的 TINiFile 的翻译,但适用于 java。它完全支持所有 INI 文件功能

https://github.com/SubZane/JNiFile

于 2013-01-11T14:22:57.717 回答