项目中遇到读写CSV的功能,在这里简单的总结一下。
要求是从数据库里面去的数据,写到CSV文件里。
注意的几点:CSV里面的数据使用“,”分割。每个数据用双引号括起来。
使用的第三方jar包 opencsv-2.3.jar里面的CSVWriter 类。
使用它参数最全的构造方法,下面是源代码。
1:Writer对象; 2:c:分割符“,”;3:每个数据引号双引号; 4:转译字符; 5:换行符(r\n\)
关于参数char,直接传入对应的ASCII。比如双引号用 c1=34;或者直接用c=','public CSVWriter(Writer writer, char c, char c1, char c2, String s)
{
resultService = new ResultSetHelperService();
rawWriter = writer;
pw = new PrintWriter(writer);
separator = c;
quotechar = c1;
escapechar = c2;
lineEnd = s;
}
首先构造Writer对象。Writer是抽象类。通过其子类BufferedWriter实例化对象。
outPath:csv出力的全路径;append:是否对文件进行覆盖写入。
// 建立一个字节流
FileOutputStream fileOutputStream= new FileOutputStream(outPath, append);
// 这个字符流的编码方式是charsetName(很重要的转码方式)
OutputStreamWriter outputStreamWriter = new OutputStreamWriter(fileOutputStream,charsetName);
// 流输出用缓存处理,加快速度
BufferedWriter bufferedWriter=new BufferedWriter(outputStreamWriter);
// 建立一个对象
CSVWriter write = new CSVWriter(bufferedWriter, xxxxxx);
// 调用writeAll方法 参数是一个String[]类型的List
write.writeAll(list);
// 写入之后不要忘记关闭所有的流
fileOutputStream.close();
outputStreamWriter.close();
bufferedWriter.close();
write.close();
1:注意几个类的关系:
FileOutputStream 是字节流,它一个字节一个字节的向外边送数据
OutputStreamWrite是字符流,它一个字符一个字符的向外边送数据
BufferedWriter Buffer是一个缓冲区,为什么要用BUFFER呢?
如果你直接用stream或者writer,你的硬盘可能就是一个字符或者一个字节 读写硬盘一次,
可是你用了Buffer,你的硬盘就是读了一堆数据之后,读写一下硬盘。这样对你硬盘有好处。
2:写文件的时候之前,要先创建下路径文件。
File file = new File(outPath);
// 文件路径作成
file.getParentFile().mkdirs();