用Java读取ini文件的问题

时间:2012-10-17 14:47:09

标签: java apache-commons-config

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

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

然后我带我去了this question。我添加了公共语言3.1。我有commons config 1.9,commons集合3.2.1。公共记录1.1.1也是如此。我也尝试过commons config 1.8和lang 2.6。现在我得到一个新的错误“线程中的异常”main“java.lang.NullPointerException at com.toolbox.dev.ReadIni.main(ReadIni.java:28)”在我做的调整后你可以看到下面的新代码并解决错误。

我的代码:

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");
        }
    }
}

Stack Overflow的原始代码:

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");
            }
        }

3 个答案:

答案 0 :(得分:1)

这看起来不太有希望?

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

这条线是28吗?

答案 1 :(得分: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); 

答案 2 :(得分:0)

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

https://github.com/SubZane/JIniFile