如何使用Java写入CSV文件

2025/04/06

1. 概述

在本快速教程中,我们将学习如何使用Java写入CSV文件。CSV代表逗号分隔值,它是系统之间批量数据传输的通用格式。

为了写入CSV文件,我们将使用java.io包中的类。

我们将讨论特殊字符以及如何处理它们,我们的目标是在Microsoft Excel和Google Sheets中打开我们的输出文件。

在我们的Java示例之后,我们将简要介绍一些用于处理CSV文件的可用第三方库

2. PrintWriter

我们将使用PrintWriter来写入我们的CSV文件,有关使用java.io写入文件的更详细信息,请参阅我们关于写入文件的文章。

2.1 写入CSV

首先,让我们创建一个方法来格式化表示为String数组的单行数据:

public String convertToCSV(String[] data) {
    return Stream.of(data)
        .map(this::escapeSpecialCharacters)
        .collect(Collectors.joining(","));
}

在调用此方法之前,让我们先构建一些示例数据:

List<String[]> dataLines = new ArrayList<>();
dataLines.add(new String[] { "John", "Doe", "38", "Comment DatanAnother line of comment data" });
dataLines.add(new String[] { "Jane", "Doe, Jr.", "19", "She said "I'm being quoted"" });

有了这些数据,让我们用convertToCSV转换每一行,并将其写入文件:

public void givenDataArray_whenConvertToCSV_thenOutputCreated() throws IOException {
    File csvOutputFile = new File(CSV_FILE_NAME);
    try (PrintWriter pw = new PrintWriter(csvOutputFile)) {
        dataLines.stream()
                .map(this::convertToCSV)
                .forEach(pw::println);
    }
    assertTrue(csvOutputFile.exists());
}

2.2 处理特殊字符

在CSV文件中,某些字符是有问题的,作为开发人员,我们很少能完全控制数据的质量,那么现在让我们看看如何处理特殊字符

对于我们的示例,我们将重点关注逗号、引号和换行符。包含逗号或引号的字段会被双引号包围,而双引号会被双引号转义。我们将删除换行符,并将其分别替换为空格

有问题的字符及其处理方式可能因用例而异。

我们的convertToCSV方法在构建字符串时对每条数据调用escapeSpecialCharacters方法。

现在让我们实现escapeSpecialCharacters方法:

public String escapeSpecialCharacters(String data) {
    if (data == null) {
        throw new IllegalArgumentException("Input data cannot be null");
    }
    String escapedData = data.replaceAll("\\R", " ");
    if (escapedData.contains(",") || escapedData.contains("\"") || escapedData.contains("'")) {
        escapedData = escapedData.replace("\"", "\"\"");
        escapedData = "\"" + escapedData + "\"";
    }
    return escapedData;
}

3. 第三方库

正如我们在示例中看到的那样,当我们开始考虑特殊字符以及如何处理它们时,写入CSV文件会变得很复杂。

幸运的是,有许多第三方库可用于处理CSV文件,其中许多库可以处理这些特殊字符和可能出现的其他特殊情况。

让我们来看看其中的几个:

4. 总结

在这篇简短的文章中,我们讨论了如何使用Java的PrintWriter类写入CSV文件。接下来,我们讨论并处理了输出数据中的特殊字符。

在我们的简单Java示例之后,我们查看了可用的第三方库的概述。

Show Disqus Comments

Post Directory

扫码关注公众号:Taketoday
发送 290992
即可立即永久解锁本站全部文章