Проблемы с чтением ini-файла в Java

У меня возникли проблемы с использованием конфигурации Apache commons для чтения файла ini. Я приложил импорт, если я что-то упустил. Ниже приведен пример, который я нашел в stackoverflow, и, насколько я могу найти, других примеров для просмотра нет. Проблема iniObj. При использовании Eclipse он выделен красным цветом.

Если я инициализирую переменную, new "HierarchicalINIConfiguration(iniFile); разозлится и захочет добавить try/catch или throws... что не должно быть проблемой... но тогда try/catch или throws разозлится и скажет: "Никакое исключение типа ConfigurationException не может быть брошенный; тип исключения должен быть подклассом Throwable».

Что затем привело меня к этому вопросу. Я добавил общий язык 3.1. У меня есть общая конфигурация 1.9, общие коллекции 3.2.1. ведение журнала Commons 1.1.1. Я также пробовал это с общей конфигурацией 1.8 и lang 2.6. Теперь я получаю новую ошибку «Исключение в потоке «main» java.lang.NullPointerException в 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");
            }
        }

person user1753429    schedule 17.10.2012    source источник
comment
лол, конечно, теперь это работает, я подумал, что, возможно, iniobj был опечаткой... и пробовал iniconfobj раньше, но теперь, когда у меня есть все правильные зависимости... между прочим, используя старые, это работает.   -  person user1753429    schedule 17.10.2012
comment
Вы знаете, что код, который вы изначально опубликовали, был коротким из двух фигурных скобок? Приведение в порядок пустого пространства позволяет четко увидеть такую ​​ошибку.   -  person Samuel Harmer    schedule 13.12.2013


Ответы (3)


Поскольку вы уже инициализировали HierarchicalINIConfiguration (вторая строка в «основном») как:

   HierarchicalINIConfiguration iniConfObj = new HierarchicalINIConfiguration(iniFile);

Я полагаю, вы хотите удалить HierarchicalINIConfiguration iniObj = null; (около 5 строк ниже) из своего кода и изменить

  SubnodeConfiguration sObj = iniObj.getSection(sectionName); 

в (используйте iniConfObj вместо iniObj)

   SubnodeConfiguration sObj = iniConfObj.getSection(sectionName); 
person Yogendra Singh    schedule 17.10.2012
comment
почему я не увидел твоего ответа раньше! но это была проблема, спасибо! - person user1753429; 17.10.2012

Это не выглядит многообещающе?

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

Это строка 28?

person Brian Agnew    schedule 17.10.2012
comment
Нет, это не был! вы, должно быть, пропустили мой комментарий, stackoverflow не позволил бы мне так быстро ответить на мой собственный вопрос. iniobj должен был быть iniconfobj, код примера был неправильным. как только я исправил, что мне не нужно инициализировать переменную. - person user1753429; 17.10.2012

Вы можете попробовать JINIFile. Является переводом TIniFile из Delphi, но для java. Он полностью поддерживает все функции файла INI.

https://github.com/SubZane/JIniFile

person Andreas Norman    schedule 11.01.2013