本文讲述如何用java来写csv文件。 CSV的意思是逗号分隔符(Comma-Separated-Values),是不同系统之间传输数据的一种常见方式。
要想写csv文件需要用到java.io 包。本文将讲述如何处理特殊字符。我们的目标是写出Microsoft Excel和google sheets可以读取的csv文件。
给出java例子后,我们还将给出一些好用的第三方库。
我们写一个方法,讲传入的字符串数组转成逗号分隔符的字符串:
public String convertToCSV(String[] data) {
return Stream.of(data)
.map(this::escapeSpecialCharacters)
.collect(Collectors.joining(","));
}
调用这个方法之前,我们先造下数据
List dataLines = new ArrayList<>();
dataLines.add(new String[]
{ "John", "Doe", "38", "Comment Data\nAnother line of comment data" });
dataLines.add(new String[]
{ "Jane", "Doe, Jr.", "19", "She said \"I'm being quoted\"" });
调用方法写出到文件
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());
}
我们重点处理逗号,引号和换行符。包含逗号和引号的字符将包上双引号,而双引号也会被用双引号转义。我们用空格来替换换行符。
public String escapeSpecialCharacters(String data) {
String escapedData = data.replaceAll("\\R", " ");
if (data.contains(",") || data.contains("\"") || data.contains("'")) {
data = data.replace("\"", "\"\"");
escapedData = "\"" + data + "\"";
}
return escapedData;
}
从上面的例子可以看出,写CSV文件最头痛的就是处理特殊字符。下面有几个非常不错的第三方库:
本文演示如何用PrintWriter写CSV文件。然后讨论了如何处理特殊字符。给出示例代码之后介绍了常用的第三方类库。
英文原文:https://www.baeldung.com/java-csv
源码:https://github.com/eugenp/tutorials/tree/master/core-java-io
如果觉得本文对你有帮助,欢迎点赞评论,欢迎关注我,我将努力创作更多更好的文章。