2009-05-27 72 views
1

我對此很新穎,這可能是一個非常明顯的答案。在我的csv腳本中,我試圖弄清楚如何使用CSVReader類讀取一個csv文件並寫入一個新的csv文件。該錯誤告訴我writeNext(java.lang.String [])不能應用於(java.lang.String)。我試過使用直接賦值和getString()方法,但沒有任何工作。有任何想法嗎?Java:將String []數組元素賦值給一個String?

我有以下代碼: 修訂

public static void main(String[] args) throws IOException { 
    //read csv file 
    CSVReader reader = new CSVReader(new FileReader(ADDRESS_FILE)); 

    //write to csv file 
    CSVWriter writer2 = new CSVWriter(new FileWriter("output.csv"), '\t'); 

    String [] nextLine; 
    while ((nextLine = reader.readNext()) != null) { 
     System.out.println("Name: [" + nextLine[0] + "]\nAddress: [" + nextLine[1] + "]\nEmail: [" + nextLine[2] + "]"); 
     String[] newRow = new String[] {nextLine[0],nextLine[2], nextLine[1]}; 
    } 

    //writer2.writeNext(entries); 
    writer2.writeAll(newRow); 
    writer2.close(); 

} 

錯誤: C:\ java的\例子\ ETHImport.java:46:找不到個符號 符號:可變NEWROW 位置:類ETHImport writer2.writeAll(newRow);

1 error

在此先感謝。

+0

我累了,懶惰,不在乎爲你做所有事情:錯誤發生在哪裏? – Pesto 2009-05-27 20:01:37

+0

在你的新代碼中,你只是缺少「新」。它應該是「字符串[] newRow =新的字符串[] ...」 – 2009-05-27 20:58:02

+0

很酷..真的有幫助..不知道爲什麼我得到一個在while循環中聲明的變量 – phill 2009-05-27 21:05:06

回答

2
String[] entries = new String[] { "entry1", "entry2"}; 

它期望的是一組條目而不是一個字符串。如果你是以下這個例子http://opencsv.sourceforge.net/通知,

String[] entries = "first#second#third".split("#"); 

拆分呼叫在一個String []的最終結果。

爲您的代碼:

public static void main(String[] args) throws IOException { 
     //read csv file 
     CSVReader reader = new CSVReader(new FileReader(ADDRESS_FILE)); 

     //write to csv file 
     CSVWriter writer2 = new CSVWriter(new FileWriter("output.csv"), '\t'); 

     String [] nextLine; 
     while ((nextLine = reader.readNext()) != null) { 
       writer2.writeNext(new String[] {nextLine[0],nextLine[2], nextLine[1]}); 
     } 


     writer2.close(); 

} 
+0

我在掙扎的是隻爲每個記錄集創建一個具有選定列的字符串,所以我可以將它寫入一個新文件 – phill 2009-05-27 20:17:16

+0

您不應該構建字符串。你應該用選定的列建立一個字符串*數組*。 – 2009-05-27 20:22:13

+0

太棒了!我不知道我可以在方法中聲明一些東西。謝謝! – phill 2009-05-27 21:16:36

2

要輕鬆地把StringString[]使用:

String[] entriesArr = new String[]{ entries }; 

或快捷方式現在

String[] entriesArr = { entries }; 

entriesArr是包含一個元素的String[]entries

+0

或者這個快捷方式,因爲這是一個聲明:String [] strs = {str}; – 2009-05-27 21:19:52

+0

良好的通話! – jjnguy 2009-05-27 22:27:25

+0

請注意,該元素應該是一個字符串字面值,所以實際上該行應該是String [] entriesArr = new String [] {「entries」}。 – portfoliobuilder 2015-02-12 00:42:52

3

您需要一個字符串數組,而不是一個字符串。你確定你想把所有的值都放到一個單獨的字符串中來開始嗎?我期望writeNext根據你給它的字符串值寫一行,用放入逗號等等。畢竟,它是一個CsvWriter - 它應該做逗號分隔。

它看起來對我來說,你已經在使用你想要做什麼它的writeAll方法,並writeNext將只寫一行...什麼是你想實現這一writeAll不會爲你做什麼?爲什麼你需要逐行閱讀並首先構建entries?你就不能叫:

writer2.writeAll(allElements); 

我的猜測是,那將寫一選項卡 - 分隔文件不過,鑑於writer2是如何構建的。

編輯:鑑於該評論的附加信息,我懷疑你想:

  • 打開CsvReader
  • 打開CsvWriter(用適當的Writer;作爲構造函數的參數)
  • 一次循環讀取一行作爲字符串數組(使用CsvReader.readNext()),爲輸出創建一個新的字符串數組,然後調用CsvWriter.writeNext()將該字符串數組寫入該文件。
  • 關閉在finally塊的CsvReaderCsvWriter(所以他們仍然會得到,如果有什麼差錯關閉)

建設從現有的人會是這樣的(以下的例子)新的字符串數組:

String[] newRow = new String[] { oldRow[0], oldRow[2], oldRow[1] }; 

這基本上只會保留前三列,轉換第二和第三列。如果您需要其他欄目,只需以相同的方式進行更改即可。

注意,我不會建議使用FileWriter寫入一個文件 - 使用FileOutputStreamOutputStreamWriter鏈接到它,因爲這可以讓你設置的字符編碼,而不是使用默認的平臺之一。

+0

我很確定你是對的。 CsvWriter的Javadoc贊同你的期望,但我從未使用它。 – mkb 2009-05-27 20:04:28

+0

目標是提取csv文件中選定數量的列,操縱/格式化其中的一些列表,然後使用逗號將它們插入到輸出文件中,並使用分號作爲行結束符。 writeall只是將所有東西都轉儲出來,而不是隻輸出我需要的列 – phill 2009-05-27 20:15:16

+0

我用建議的更改對其進行了更新,但是現在我產生了一個不同的錯誤。這是說'.class'是預期的,並有一個胡蘿蔔指向nextLine ..是否正確的語法在while循環中聲明這樣的字符串? – phill 2009-05-27 20:54:22

0

writer.writeNext(字符串[])正在尋找一個數組,它將然後寫爲 「[0],[1],[2]」

由於要存儲整個csv文件作爲一個字符串,你需要分割該字符串備份。真的,你應該不把每個項目組合成一個字符串,而是將其存儲爲一個字符串數組,代表csv文件中的每一行。

相關問題