2010-02-17 16 views
1

我需要解析2維列表,這裏是我的架構名單:如何在我的收藏(列表)中使用opencsv?

list (size=12) 
->[0] = "export.SampleJ:12432" 
    --> id = 12432 
    --> dateCreatedSample = "Tue Feb 03 19:04:23 CST 2009" 
    --> ttId = 0 
    --> chipId = 1012 
    --> ... 
->[1] = "export.SampleJ:12433" 
    --> id = 12433 
    --> ... 
->[2] ... 

我想:

List<String[]> allElements = list.readAll(); 
StringWriter sw = new StringWriter(); 
CSVWriter writer = new CSVWriter(sw); 
writer.writeAll(allElements); 

但我有此錯誤:法無簽名:java.util.ArrayList中。 readAll()是適用於參數類型:()值:[]

也試過:

CSVWriter writer = new CSVWriter(new FileWriter("MyFile.csv")); 
String[] entries = list; 
writer.writeNext(entries); 
writer.close(); 

我得到一個csv文件,但只有:「export.SampleJ:12432」,「export.SampleJ:12432」,...

我該如何解析id,dateCreatedSample等?

有沒有辦法直接連接我的列表與opencsv?

回答

2

您需要添加一個方法到SampleJ以將其轉換爲String[],例如,

class SampleJ { 
    // ... 
    public String[] toStringArray = 
     Arrays.asList(String.valueOf(getId()), 
         String.valueOf(getDateCreatedSample()), 
         String.valueOf(getTtId()), 
         String.valueOf(getChipId())); 
} 

然後循環以寫入所有行,例如,

for (SampleJ elem: list) { 
    writer.writeNext(elem.toStringArray()); 
} 
+0

很好的例子,我解決了我的課,問題解決了!謝謝 –

0

您可以使用writer.writeAll(list)和reader.readAll()方法。我不明白爲什麼它不應該工作。

編輯:忽略此職位。我太困了,看不到這兩個維度。

+0

如果我嘗試writer.writeAll(list),我有java.lang.ClassCastException:export.SampleJ。 –

+0

我現在明白了。只需遍歷列表併爲其中的每個對象迭代,手動構建一個String []數組。然後調用writeNext(字符串數組)。問題在於OpenCSV不能神奇地寫對象。你必須有一個String []的列表,然後調用writeAll(list),或者像上面提到的那樣逐行構建一個String [],並用writeNext(String [])寫每一行。 –

+0

啊,我看到finnw已經發布了我所說的一個示例代碼。 –