从数据库导出数据到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)