java 多线程csv文件续写和文件指定编码

本文介绍了解决从数据库导出CSV文件至Excel时出现乱码的方法。主要原因是Excel未能正确识别编码格式。文中提供了将文件转码为UTF-8-BOM格式的解决方案,并介绍了如何通过文本编辑器修改编码及使用Java代码实现。
摘要由CSDN通过智能技术生成

从数据库导出数据到csv文件的时候,采用默认的utf-8编码导致用默认程序excel打开乱码。原因是excel打开的时候会检测是否有bom从而决定是否使用utf编码格式进行解码。因此把文件转码为utf-8-bom格式编码就可以正常打开。bom占用3个字节,EF BB BF。可以使用十六进制编辑器将EF BB BF插入到文件头。或者使用文本编辑器修改编码格式为UTF-8 with Bom。这种只是暂时的修改。长期使用的话还是需要将程序的编码修改为GBK。

BufferedWriter writer= new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file,append), "GBK"));

多个线程对同一个文件进行写入的时候,FileOutputStream构造方法的append参数必须为true。而且必须换行符的正确写入。可以使用stringBuild类缓存需要写的内容。stringBuild中每添加完成一行数据,紧跟一个换行符。查看源码知道,换行符可以用java.security.AccessController.doPrivileged( new sun.security.action.GetPropertyAction("line.separator"))方法来获取。

或者使用common-io的类

FileWriterWithEncoding writer = new FileWriterWithEncoding(file, encoding, append)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值