OpenCSV CSVWriter在文件末尾添加空白行

时间:2018-11-07 14:45:59

标签: java

我正在使用以下代码从竖线分隔的CSV中删除引号:

public Path truncateQuoteMarks(Path path) throws Exception {

    String pipeDelimitedFilename = path.toAbsolutePath().toString();

    Path convertedFilename = Paths.get(pipeDelimitedFilename.substring(0, pipeDelimitedFilename.lastIndexOf(".csv")) + "_no_quotes.csv");

    CSVReader reader = new CSVReader(new InputStreamReader(new BufferedInputStream(new FileInputStream(path.toAbsolutePath().toString()))), '|', CSVParser.DEFAULT_QUOTE_CHARACTER);

    reader.skip(1);

    FileWriter fw = new FileWriter(convertedFilename.toAbsolutePath().toString());
    fw.write(System.lineSeparator());
    CSVWriter writer = new CSVWriter(fw, '|', CSVWriter.NO_QUOTE_CHARACTER, CSVWriter.RFC4180_LINE_END);

    String[] currentLine;
    while((currentLine = reader.readNext()) != null) {
        writer.writeNext(currentLine);
    }

    writer.flush();
    writer.close();
    reader.close();

    return convertedFilename;
}

但是,它在csv的末尾留有空白行(请参见图片)。 enter image description here

在谷歌上搜索时,我发现至少here和另一个站点都曾询问过这个问题。另一个站点声称这是OpenCSV的工作方式,并建议编辑文件大小,但是必须有其他方法。

是否可以从文件末尾删除此空白行? SQL Server BULKINSERT根本不喜欢它。

1 个答案:

答案 0 :(得分:0)

根据RFC4180,最后一个行尾是可选的。因此,作家可以写也可以不写。 openCSVWriter不能选择创建没有行结尾的最终版本。您可以扩展Class并为行尾添加一个setter,并在写最后一行或手动编写之前将其设置为空。

对于每种可能性,您都应该查看writer的来源。