2013-07-22 45 views
1

我試圖使用ini4j與以下代碼在Groovy添加多個值選項到我的ini文件(我嘗試了一些變種):的Groovy/Java的:Ini4j插入到單個參數的多個值在不同的線路

import org.ini4j.Wini 
List valuesList = [ 'val1’, ‘val2’, ‘val3' ] 
(new Wini(new File("test.ini"))).with{ 
    valuesList.each{ 
      put('sectionNa'sectionName','optionName', it) 
    } 
    store() 
} 

import org.ini4j.Wini 
List valuesList = [ 'val1’, ‘val2’, ‘val3' ] 
(new Wini(new File("test.ini"))).with{ 
    Section sectionObject = get(‘sectionName’) 
    sectionObject .put('optionName', ‘val1’) 
    sectionObject .put('optionName', ‘val2’) 
    sectionObject .put('optionName', ‘val3’) 
    } 
    store() 
} 

我ini文件像這樣的:

[sectionName] 
optionName = val3 

但我想:

[sectionName] 
optionName = val1 
optionName = val2 
optionName = val3 

莫非你請教我如何解決我的問題?提前致謝!

更新1

我仍在等待更好的解決方案。但是我在下面創建了直接的ini文件編輯。請給我提供任何關於它的反饋:

List newLines = [] 
File currentFile = new File("test.ini") 
List currentLines = currentFile.readLines() 
int indexSectionStart = currentLines.indexOf('sectionName') 
(0..indexSectionStart).each{ 
    newLines.add(currentLines[ it ]) 
} 
List valuesList = 'val1,val2,val3'.split(',') 
valuesList.each{ 
     newLines.add("optionName = $it") 
} 
(indexSectionStart + 1 .. currentLines.size() - 1).each{ 
    newLines.add(currentLines[ it ]) 
} 
File newFile = new File("new_test.ini") 
if (newFile.exists()) newFile.delete() 
newLines.each { 
    newFile.append(it+'\n') 
} 

而只需刪除舊文件並重新命名一個新文件。我實現它,因爲我沒有找到任何insertLine()像非標準File

+0

INI文件[不應該有一個部分重名(HTTP:// en.wikipedia.org/wiki/INI_file#Duplicate_names) –

+0

@tim_yates這不是一個案例。應用程序我必須正確設置重複選項。 – zubactik

+0

想想我可能已經明白了(見下文) –

回答

0

正確的方法,這個怎麼樣:

import org.ini4j.* 

List valuesList = [ 'val1', 'val2', 'val3' ] 

new File("/tmp/test.ini").with { file -> 
    new Wini().with { ini -> 
     // Configure to allow multiple options 
     ini.config = new Config().with { it.multiOption = true ; it } 

     // Load the ini file 
     ini.load(file) 

     // Get or create the section 
     (ini.get('sectionName') ?: ini.add('sectionName')).with { section -> 
      valuesList.each { 

       // Then ADD the options 
       section.add('optionName', it) 
      } 
     } 

     // And write it back out 
     store(file) 
    } 
} 
相關問題