最近在使用
CsvWriter
导出csv文件时发现,明明将日期已经格式化成了字符串类型,但是导出之后文件中还是按照日期格式显示,影响观看
- 以前手动导出csv文件时,遇到这种问题的时候若是想保存字符串格式可以在字段前加
\t
,但是无效,最后发现需要设置CsvWriter
的属性
csvWriter.setForceQualifier(true);
csvWriter.setTextQualifier('\t');
注意上边的方法虽然可以避免日期的自动转换,但是却会将所有的列都加上\t
这样如果有数字存在的话就会影响求和等计算了,下边根据源码分析得到正确的方法。
cswriter主要处理代码如下
image.pngimage.png
第一个红框中的代码可以知道,当var2为false时会对传入的参数进行
trim()
操作,我们看一下String
类的trim()
方法可以知道,会将两端的所有小于' '
空格的都会被砍掉,看一下Ascii码
表,我们可以知道空格的值是32
,其他的控制字符包括\t
均在其上边,都会被干掉,这也就是为什么我们传入了\t
在对应的字段之前却不能保持他是文本格式的原因,其实到这里就可以知道直接在调用csvWriter.writeRecord(String[] var1, boolean var2)
,将第二个值改为true
就行了,默认是false
。第二个矿中其实就是对是否会将定义的文本限定符
TextQualifier
在写入字段的前后写入流中,我们从代码中可以看到默认的TextQualifier
的值是双引号image.png
当然双引号是肯定可以的,我们经常如果一个字段中含有逗号等特殊符号的话,就用双引号包裹,这样就会限制在一个字段中的,对格式的限制肯定也是可以的,这个是
csv
的属性。var3
其实就是第一种方法设置的结果,但是如果通过setForceQualifier()
方法的话就是全局的了不能满足我们的定位到字段的要求,红框中的方法就是对当前的字段两头放置双引号,从几个
if
语句我们可以知道有几个方法
- 字段中含有TextQualifier(”),或者含有Delimiter(,)或者以#开头
- 以空格或者'\t'开头
- 以空格或者'\t'结尾
总结:
- csvWriter.writeRecord();第二个参数设为true
- 以 空格开头
网友评论