问题:写入csv文件时转换编码utf-8成utf-8-bom

原先用PrintWrite写入的时候,设置编码为utf-8,但是不满足需求。追加使用BufferedWriter 字节流编码不支持utf-8-bom,新增写入之前的代码

FileOutputStream fos = null;
                //需要UTF-8-BOM编码
                byte[] uft8bom={(byte)0xef,(byte)0xbb,(byte)0xbf};
                fos = new FileOutputStream(filePath, true);
                fos.write(uft8bom);
public static void csvwriter(List<LinkedHashMap<String, String>> mapList, String[] headers, String filePath)
            throws IOException {
        check(mapList, headers, filePath);
        //判断是否有源文件,如果有就追加写入
        if (!readCsv(filePath)){

            FileOutputStream fos = null;
            //需要UTF-8-BOM编码
            byte[] uft8bom={(byte)0xef,(byte)0xbb,(byte)0xbf};
            fos = new FileOutputStream(filePath, true);
            fos.write(uft8bom);
            //第一次写入
            try (PrintWriter printWriter = new PrintWriter(new OutputStreamWriter(fos, "UTF-8"))) {
                StringBuilder builder = new StringBuilder();
                for(String header : headers) {
                    builder.append(header).append(",");
                }
                builder.deleteCharAt(builder.length() - 1);
                printWriter.println(builder.toString());
                builder.delete(0, builder.length());
                for (LinkedHashMap<String, String> map : mapList) {
                    for (Map.Entry<String, String> entry : map.entrySet()) {
                        builder.append(entry.getValue()).append(",");
                    }
                    builder.deleteCharAt(builder.length() - 1);
                    printWriter.println(builder.toString());
                    builder.delete(0, builder.length());
                }
            }
        }else {
            //追加写入
//            File csvFile = new File(filePath);
            try{
                FileOutputStream fos = null;
                //需要UTF-8-BOM编码
                byte[] uft8bom={(byte)0xef,(byte)0xbb,(byte)0xbf};
                fos = new FileOutputStream(filePath, true);
                fos.write(uft8bom);
                BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(fos, "UTF-8"), 1024);

                //遍历所有数据
                for (LinkedHashMap<String, String> map : mapList) {
                    StringBuilder builder = new StringBuilder();
                    for (Map.Entry<String, String> entry : map.entrySet()) {
                        builder.append(entry.getValue()).append(",");
                    }
                    builder.append("\r\n");
                    bw.write(builder.toString());
                }
                bw.flush();
                bw.close();

            }catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

感谢:https://www.cnblogs.com/jinzhiming/p/10317912.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值