Как прочитать несколько опций в список или массив с ini4j?

Я хочу иметь INI-файл с разделом, содержащим кучу значений параметров с одинаковым ключом параметров. Другими словами, я хочу представить массив в INI-файле. Моя проблема в том, что только последнее значение считывается в массив или список, в зависимости от метода getAll, который я использую:

INI-файл:

[FTP]
; Access FTP server?
active = false
file.pattern = VA_.*.(csv|dat)$
#file.pattern = VA_.*(\\.(?i)(csv|dat))$
delete.after.download = false

[SFTP]
; Access FTP server?
active = true
file.pattern = VA_.*.(csv|dat)$
#file.pattern = VA_.*(\\.(?i)(csv|dat))$
delete.after.download = false

[SMB]
; Access SMB target?
active = false

[SCP]
; Access SCP target?
active = false

[FTP_Accounts]
ftpAccount = /aaa/xxx
ftpAccount = /bbb/xxx
ftpAccount = /ccc/xxx
ftpAccount = /ddd/xxx
ftpAccount = /eee/xxx
ftpAccount = /fff/xxx

Следующий Java-код не дает мне все значения параметров для ключа параметра ftpAccount:

public SftpFileHandler() {

    Wini ini = null;
    try {
        Config.getGlobal().setEscape(false);
        Config.getGlobal().setMultiSection(true);
        Config.getGlobal().setMultiOption(true);
        ini = new Wini(new File("MyIniFile.ini"));
    } catch (InvalidFileFormatException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
    final String ftpFileNamePattern =
            ini.get("FTP", "file.pattern", String.class);
    pattern = Pattern.compile(ftpFileNamePattern);

    List<Ini.Section> list = ini.getAll("FTP_Accounts");
    final Ini.Section ftpAccountsSection = ini.get("FTP_Accounts");
    for (final String optionKey: ftpAccountsSection.keySet()) {
        System.out.println(optionKey);
    }
    ftpAccounts = ftpAccountsSection.getAll("ftpAccount", String[].class);
    final List<String> ftpAccountsList = ftpAccountsSection.getAll("ftpAccount");
    final Ini.Section sftpAccountsSection = ini.get("SFTP_Accounts");
    sftpAccounts = sftpAccountsSection.getAll("sftpAccount", String[].class);

    connect();
}

Я думал, что смогу получить все значения опций с помощью вызовов getAll в массив.

1 ответ

Благодаря Philippe Cerou в вопросе Java ini4j - чтение нескольких опций из файла.ini.

Он указал мне не загружать INI-файл при создании экземпляра объекта Wini. Сначала создайте экземпляр Config и установите для его свойства MultiOption значение true. Затем инициализируйте экземпляр Wini без файла ini в качестве параметра. Вместо этого загрузите INI-файл впоследствии, используя метод load().

Wini ini = null;
    Config conf = new Config();
    try {
        conf.setMultiOption(true);
        ini = new Wini();
        ini.setConfig(conf);
        ini.load(new File("MyIniFile.ini"));
    } catch (InvalidFileFormatException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
Другие вопросы по тегам