2013-10-30 36 views
1

我想要使用ini4j讀取多個值,文檔說應該可以使用Options類。Java ini4j - 從.ini文件讀取多個選項

這裏是我的樣本.ini文件(./dwarfs.ini)

[dopey] 
age = 23 
fortuneNumber = 11 
fortuneNumber = 33 
fortuneNumber = 55 

這裏是代碼來閱讀:

Ini ini = new Ini(); 
Config conf = new Config(); 
conf.setMultiOption(true); 
ini.setConfig(conf); 
ini.load(new FileReader("./dwarfs.ini")); 

fortuneNumber屬性閱讀後只有55,我希望它是一個數組或列表,任何東西。

+0

你是如何獲取 「fortuneNumber」 的價值? – Seelenvirtuose

+0

@Seelenvirtuose是這樣的:ini。取(「dopey」,「fortuneNumber」); –

+0

@Seelenvirtuose我也試過多次調用fetch,但它總是報告ini文件的最後一個值 –

回答

2

ini4j project的網絡存在包含(其中包括)非常簡單的tutorials。其中一個教程解釋瞭如何檢索多個值。當使用返回單個引用的fetch方法時,你怎麼能期望得到一個列表或一個數組?看看API

在教程,有解釋多值的部分:

[ini4j]庫引入多重映射接口,這是正常的延伸地圖 ,但允許每鍵乘法值。您可以簡單地爲給定鍵索引值 ,類似於JavaBeans api中的索引屬性。

還有一個例子:

String n1 = sneezy.get("fortuneNumber", 0); // = 11 
String n2 = sneezy.get("fortuneNumber", 1); // = 22 
String n3 = sneezy.get("fortuneNumber", 2); // = 33 
String n4 = sneezy.get("fortuneNumber", 3); // = 44 

在這個例子中,打噴嚏是Section,但也要有Ini工作。

只是爲了使其完整:Ini也知道方法List<V> getAll(Object key)

+0

恩,哦,我在看那些教程,但是找不到我在找什麼..不要知道我在找什麼,可能太困了。非常感謝您指出這一點! –

+0

不客氣。 – Seelenvirtuose

1

來處理部分採用複式屬性下面的代碼:

Ini oINI = new Wini(); 
Config conf = new Config(); 
conf.setMultiOption(true); 
oINI.setConfig(conf); 
oINI.load(new File("....../myfile.ini")); 

不要直接打開類創建INI文件,設置選項之前,否則選項將不會被使用,默認情況下多選項SI設置爲「false」。

爲此解決方案搜索了一陣子。

+0

所以你剛纔複製了原始問題的代碼? –

-1
  1. 您首先需要setConfig,然後加載文件。
  2. 您需要使用List來處理多個相同的值。

這裏的例子:

Ini ini = new Wini(); 

Config config = new Config(); 
config.setMultiOption(true); 
config.setMultiSection(true); 

ini.setConfig(config); //set config 

ini.load(new File(filename));  // load AFTER setConfig 

for (String sectionName : ini.keySet()) { 
    List<Section> sectionList = ini.getAll(sectionName); // use List 
    for (Section section : sectionList) { 
     for (String optionName : section.keySet()) { 
      List<String> optionList = section.getAll(optionName); 
      for (String optionVaule : optionList) { 
       System.out.printf("%s %s %s\n", sectionName, optionName, optionVaule); 
      } 
     } 
    } 
} 

這裏出去放:

dopey age 23 
dopey fortuneNumber 11 
dopey fortuneNumber 33 
dopey fortuneNumber 55 
+0

StackOverflow不支持代碼解答。請解釋您的代碼爲何以及如何解決問題中提到的問題。 –