2017-06-19 227 views
0

我試圖使用OpenCSV從一個CSV文件中讀取數據。然後,我想從輸入的csv中複製所有數據,並將其輸出到另一個csv文件,同時添加一個包含信息的新列。OpenCSV - 在添加列時將一個csv文件複製到另一個csv文件

public void run_streets_tsv(String tsvIn, String tsvOut) throws Exception 
{ 

    CSVReader reader = null; 
    CSVWriter writer = null; 

    try 
    { 

     reader = new CSVReader((new FileReader(tsvIn))); 
     writer = new CSVWriter(new FileWriter(tsvOut), '\t'); 

     String element [] = null; 
     List<String[]> a = new ArrayList<String[]>(); 

     while((element = reader.readNext()) != null){ 
      for(int i = 0; i<element.length; i++){ 
       a.add(i, element); 
       //a.add("JSON"); need to add this json element at the end of each column 
      } 
     } 
     writer.writeAll(a); 
    } 
    catch(Exception e) 
    { 
     throw e; 
     } 
    finally 
    { 
     reader.close(); 
     writer.close(); 
     } 
    } 

另一種方法我想是這樣的(改變while循環,所有其他代碼保持不變):

 String element [] = null; 
     while((element = reader.readNext()) != null){ 
      ArrayList list = new ArrayList(Arrays.asList(reader)); 
      list.add(element); 
      list.add("JSON"); 
      writer.writeNext(element); 
     } 

這並不正確打印所有的行,但它只是拷貝。我想用它的數據添加額外的「JSON」列。

回答

0

下面「放大」element -Array,使您能夠在新創建的最後一個索引中放入某些東西。然後保存該數組。

import java.util.Arrays; 

    String element[] = null; 
    while((element = reader.readNext()) != null){ 
     element = Arrays.copyOf(element, element.length + 1); 
     element[element.length - 1] = "JSON"; 
     writer.writeNext(element); 
    } 
+0

這會逐行讀取正確嗎?我如何編輯這個以便逐列讀取? – Felix

+0

@Felix是的。爲了逐列讀取,您必須讀取整個文件,因爲'csv'逐行存儲數據。要讀取整個文件,請使用'reader.readAll()'。如果無法將整個文件存儲在RAM中,則可以創建一個例如'ArrayList ',然後讀取一行,將需要的列添加到列表中,重複。 – Poohl

+0

但是,使用.readAll()不起作用,因爲.readALL()需要一個列表。 @Poohl – Felix

0

好的,你近了,雖然我看到了一些錯誤。

'reader.readNext()'從輸入中返回一行作爲String數組,我們基本上需要爲此輸出添加一個元素。

while((element = reader.readNext()) != null) { 
    String[] output = getExpandedArray(element); 
    a.add(output); 
} 

您將需要實現getExpandedArray,我將開始它。

private String[] getExpandedArray(String[] input) { 
    String[] output = null; 
    //Populate/create output from input, but with the array 1 bigger. 
    output[output.length -1] = "JSON"; 
    return output; 
} 
+0

'System.arrayCopy(...)'可用於使用單行填充'output'。 – Poohl

+0

是的,你可以,雖然由於問題來自初學者,我建議他們自己寫它們來幫助他們瞭解Java。 – MartinByers

相關問題