java - OpenCSV CSVWriter 在文件末尾添加空行

标签 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 根本不喜欢它。

最佳答案

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

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

关于java - OpenCSV CSVWriter 在文件末尾添加空行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53191772/

相关文章:

java - Spring MVC : Apache Tile don´t work

java - 关闭套接字时不会抛出异常

java - 不可变对象(immutable对象)不会使用带有模块的 Java 9 生成代码

java - 关闭正在队列上读取的守护进程线程

java - iTextPdf setEncryption 没有权限

java - 如何从 Activity A 到 Activity B 显示seekBar值和选定的微调项目?

java - 使用 PhantomJS 和 GhostDriver 从 WebDriver 或 RemoteWebDriver 进行网络监控

java - 当远程套接字的设备关闭或应用程序强制关闭时,如何理解 java 远程套接字无法访问

java - 设置了超时的套接字有时会在读取时停止

java - 代码中创建了多少Java字符串对象 String s ="abc"+"xyz";?