CSV文件是业务的处理结果常见的持久化方式。
本文就分享将数据写入csv文件时的一个坑:没有对字符串中的英文逗号进行特殊处理
前期准备工作(包括相关工具或所使用的原料等)JavaIntelliJ IDEA 详细的操作方法或具体步骤
先上个预期的结果图:
结果文件有三列,表头分别为id,Name,Desc

再上一段生成上述csv的代码:
package chapter4;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
/**
* Created by MyWorld on 2016/3/23.
*/
public class CsvWriter {
public static void main(String[] args) throws IOException {
List
CsvWriter csvWriter=new CsvWriter();
csvWriter.write(source);
} private static List
String title="id,Name,Desc";
List
source.add(title);
source.add(String.format("1,Tom,%s", "My name is tom."));
source.add(String.format("2,Jim,%s", "My name is Jim,twenty years old"));
source.add(String.format("3,John,%s", "My name is John.Hello!"));
return source;
} public void write(List
File file=new File("result.csv");
System.out.println(file.getAbsolutePath());
FileWriter fw=new FileWriter(file);
for (String line : source) {
fw.write(String.format("%s \n", line));
}
fw.flush();
fw.close();
}
}


执行上述代码,
看看生成的结果文件是什么样的。
咦,怎么第三行的“twenty years old ”到第四列了

看看原因:
id,Name,Desc
1,Tom,My name is tom.
2,Jim,My name is Jim,twenty years old
3,John,My name is John.Hello!

原来,每二行记录的第三列的字符串中有英文逗号,而csv格式的文件是使用英文逗号分隔不同字段值的。
csv解析器在展示csv文件的内容时,把“twenty years old”展示到第四列了
解决办法:
给第三列字符串加双引号
更改代码,因为字符串外面已经有双引号了,需要将添加的双引号进行转义
Code:
source.add(String.format("2,Jim,\"%s\"", "My name is Jim,twenty years old"));

看看生成的结果与实际是否一致
是一致的!!
OK


- 评论列表(网友评论仅供网友表达个人看法,并不表明本站同意其观点或证实其描述)
-
