2014-11-24 164 views
2

我將數據追加到csv的最後一行。我想刪除現有的行,然後用附加的元素重寫它。有什麼方法可以刪除csv中的行嗎?我正在使用opencsv來讀取和寫入文件。我嘗試過使用CSVIterator類。但是,似乎迭代器不支持remove()操作。 這裏是我試過的代碼:刪除csv文件中的一行

static String[] readLastRecord(File outputCSVFile) throws WAGException { 
     checkArgument(outputCSVFile != null, "Output CSV file cannot be null"); 
     FileReader fileReader = null; 
     CSVReader csvFileReader = null; 
     CSVIterator csvIterator = null; 
     String[] csvLastRecord = null; 
     try { 
      fileReader = new FileReader(outputCSVFile); 
      csvFileReader = new CSVReader(fileReader, ',', '\'', 
        csvRowCount - 1); 
      csvIterator = new CSVIterator(csvFileReader); 
      while (csvIterator.hasNext()) { 
       csvLastRecord = csvIterator.next(); 
       csvIterator.remove(); 
      } 
     } catch (IOException ioEx) { 
      throw new WAGException(
        WAGInputExceptionMessage.FILE_READ_ERR.getMessage()); 
     } finally { 
      try { 
       if (csvFileReader != null) 
        csvFileReader.close(); 
      } catch (IOException ioEx) { 
       throw new WAGException(
         WAGInputExceptionMessage.FILE_CLOSE_ERR.getMessage()); 
      } 
     } 
     return csvLastRecord; 
    } 
+0

的API說'刪除()'*是*通過迭代器支持:HTTP: //opencsv.sourceforge.net/apidocs/當你寫「似乎迭代器不支持remove()操作」 - 你應該提供更多的細節:它不能編譯?它編譯但不運行?它運行但不做你想做的事情? – alfasin 2014-11-24 04:54:57

+0

sourceforge.net上的實現說它不支持..它是一個只讀迭代器。 http://sourceforge.net/p/opencsv/source/ci/3ba1873ef55b014893cae73b015d2bcb55b7d5a4/tree/src/main/java/au/com/bytecode/opencsv/CSVIterator.java – user3453784 2014-11-24 04:59:12

+0

在這種情況下 - 你必須閱讀所有的換行爲數據結構(列表可能已經足夠好了),刪除你想要的行並覆蓋(重寫)文件。 – alfasin 2014-11-24 05:01:27

回答

1

我剛找到答案。希望能幫助到你。

您需要閱讀的CSV,添加元素的列表串,從中取出特定行與allelements.remove(ROWNUMBER),然後寫列表字符串返回到csv文件。

rowNumber是一個int與行號。

   CSVReader reader2 = new CSVReader(new FileReader(filelocation)); 
       List<String[]> allElements = reader2.readAll(); 
       allElements.remove(rowNumber); 
       FileWriter sw = new FileWriter(filelocation); 
       CSVWriter writer = new CSVWriter(sw); 
       writer.writeAll(allElements); 
       writer.close(); 

看看下面這個例子從opencsv opencsv example

-1

使用未設置去除CSV行

function readCSV($csvFile){ 
    $file_handle = fopen($csvFile, 'r'); 
    while (!feof($file_handle)) { 
     $line_of_text[] = fgetcsv($file_handle, 1024); 
    } 
    fclose($file_handle); 
    return $line_of_text; 
} 

$csvFile1 = '../build/js/snowcem.csv'; 
$csv1 = readCSV($csvFile1); 
//specified row number want to delete on place of $id 
unset($csv1[$id]); 
$file = fopen("../build/js/snowcem.csv","w"); 

foreach ($csv1 as $file1) { 
    $result = []; 
    array_walk_recursive($file1, function($item) use (&$result) { 
    $item = '"'.$item.'"'; 
     $result[] = $item; 
    }); 
    fputcsv($file, $result); 
} 

fclose($file);