2017-04-05 85 views

回答

0

隨着OpenCSV:http://opencsv.sourceforge.net/

public class OpenCSVTest { 

    public static void main(String[] args) { 

     StringWriter target = new StringWriter(); 

     try(CSVReader reader = new CSVReader(new StringReader("my,test")); 
      CSVWriter writer = new CSVWriter(target);) { 
      for(String[] line : reader) { 
       String[] added = Arrays.copyOf(line, line.length + 1); 
       added[added.length-1] = "addition"; 
       writer.writeNext(added); 
      } 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 


     System.out.println(target.toString()); 
    } 
} 

,可隨時更換StringReaderStringWriter與你的輸入和輸出。讀者會在你的csv中遍歷每一行。您可以複製原始行並添加新列並將其寫入目標。

故障代碼:

try(CSVReader reader = new CSVReader(new StringReader("my,test")); 
      CSVWriter writer = new CSVWriter(target);) { ... } 

這是一個嘗試,以資源塊。它確保讀者和作者完成後關閉。

for(String[] line : reader) { 
    String[] added = Arrays.copyOf(line, line.length + 1); 
    added[added.length-1] = "addition"; 
    writer.writeNext(added); 
} 

這是循環的標準。 CSVReader實現了Iterable接口,它使我們能夠直接在for循環中使用它。

Arrays.copyOf(line, line.length + 1);是一個函數,它創建傳遞給它的數組的副本,但是具有新的大小。因爲你想添加一列,所以我們複製一個原始數組my,test並在其末尾添加1個空格,然後我們可以通過這樣做來爲其分配新值:added[added.length-1] = "addition";

最後,我們只是將其傳遞給作者,然後將這些值正確寫入目標中,在這種情況下爲StringWriter,在您的情況下可能是文件。

+0

嗨,你能解釋一下try和catch之間的意思嗎?對不起,我對Java有很基本的瞭解 – avajhelp

+0

@avajhelp我已經添加了詳細的解釋。讓我知道如果有什麼不清楚的 – pandaadb