删除csv文件中的一行

时间:2014-11-24 04:20:41

标签: java opencsv

我将数据附加到csv的最后一行。我想删除现有的行,然后用附加的元素重写它。有没有办法删除csv中的行?我正在使用opencsv来读取和写入文件。我尝试使用CSVIterator类。但是,似乎迭代器不支持remove()操作。 这是我试过的代码:

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;
    }

2 个答案:

答案 0 :(得分:3)

我刚刚找到答案。希望它有所帮助。

您需要阅读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 :(得分:0)

使用unset删除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);