美文网首页
csvWriter导入的文件中日期自动转换

csvWriter导入的文件中日期自动转换

作者: 马木木 | 来源:发表于2018-07-31 17:26 被阅读0次

最近在使用 CsvWriter导出csv文件时发现,明明将日期已经格式化成了字符串类型,但是导出之后文件中还是按照日期格式显示,影响观看

  1. 以前手动导出csv文件时,遇到这种问题的时候若是想保存字符串格式可以在字段前加\t,但是无效,最后发现需要设置CsvWriter的属性
csvWriter.setForceQualifier(true);
        csvWriter.setTextQualifier('\t');

注意上边的方法虽然可以避免日期的自动转换,但是却会将所有的列都加上\t这样如果有数字存在的话就会影响求和等计算了,下边根据源码分析得到正确的方法。

cswriter主要处理代码如下

image.png
image.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
  • 以 空格开头

相关文章

网友评论

      本文标题:csvWriter导入的文件中日期自动转换

      本文链接:https://www.haomeiwen.com/subject/vbihvftx.html