/*** CSV文件生成方法* @param head 文件头* @param dataList 数据列表* @param outPutPath 文件输出路径* @param filename 文件名* @return*/public static File createCSVFile(List<String> head, List<List<String>> dataList,String outPutPath, String filename) {File csvFile = null;BufferedWriter csvWtriter = null;try {csvFile = new File(outPutPath + File.separator + filename + ".csv");File parent = csvFile.getParentFile();if (parent != null && !parent.exists()) {parent.mkdirs();}csvFile.createNewFile();// GB2312使正确读取分隔符","FileOutputStream fileOutputStream = new FileOutputStream(csvFile);byte [] bs = { (byte)0xEF, (byte)0xBB, (byte)0xBF};fileOutputStream.write(bs);csvWtriter = new BufferedWriter(new OutputStreamWriter(fileOutputStream));//csvWtriter = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(//        csvFile),"GB2312"),1024);//csvWtriter = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(//        csvFile),"utf-8"),1024);//Map map = new HashMap<>();//map.put("head", head);// 写入文件头部writeRow(head, csvWtriter);// 写入文件内容for (List<String> row : dataList) {writeRow(row, csvWtriter);}csvWtriter.flush();} catch (Exception e) {e.printStackTrace();} finally {try {csvWtriter.close();} catch (IOException e) {e.printStackTrace();}}return csvFile;}/*** 写一行数据方法* @param row* @param csvWriter* @throws IOException*/private static void writeRow(List<String> row, BufferedWriter csvWriter) throws IOException {// 写入文件头部for (String data : row) {StringBuffer sb = new StringBuffer();//String rowStr = sb.append("\"").append(data).append("\",").toString();String rowStr = sb.append(data).append(",").toString();csvWriter.write(rowStr);}csvWriter.newLine();}public static void main(String[] args) {List<String> exportData = new ArrayList<>();exportData.add("第一列");exportData.add("第二列");exportData.add("第三列");List<List<String>> datalist = new ArrayList<>();List<String> data = new ArrayList<>();data.add("111");data.add("222");data.add("333");List<String> data1 = new ArrayList<>();data1.add("444");data1.add("555");data1.add("666");datalist.add(data);datalist.add(data1);String path = "C:/Users/Desktop";String fileName = "10";File file = createCSVFile(exportData, datalist, path, fileName);String fileName2 = file.getName();System.out.println("文件名称:" + fileName2);}

windows系统中文本文档的编码格式用BOM来指定,在文件的开头要写入字符:EF BB BF(UTF-8的BOM编码),这样UTF-8编码的文件才能被正确识别。

关于BOM

BOM(byte-order mark),即字节顺序标记,用于标记字节序的,也就是大小端。UTF- 8以字节为编码单元,没有字节序的问题,因此UTF-8不需要BOM来表明字节顺序,但可以用BOM来表明编码方式,在Windows系统中就是使用BOM来标记文本文件的编码方式的。UTF- 8的BOM编码是EF BB BF,Excel发现文件开头的EF BB BF就知道文件编码方式是UTF- 8,因此就能正常显示中文。

Java csv文件中文乱码问题解决办法相关推荐

  1. UTF-8的CSV文件中文乱码问题解决办法

    UTF-8的CSV文件中文乱码问题解决办法 参考文章: (1)UTF-8的CSV文件中文乱码问题解决办法 (2)https://www.cnblogs.com/leaves1024/p/1117138 ...

  2. bootstrap table export插件导出pdf格式文件中文乱码问题解决办法

    bootstrap table export插件导出pdf格式文件中文乱码的问题折腾了我整整两天,网上到处都是改源码,自己设置字体的方案,我都没搞定.结果今天看到官方文档(地址:GitHub - hh ...

  3. python输出csv文件中文乱码-python读写csv时中文乱码问题解决办法

    CSV是英文Comma Separate Values(逗号分隔值)的缩写,顾名思义,文档的内容是由 "," 分隔的一列列的数据构成的,可以使用excel和文本编辑器等打开.CSV ...

  4. python读写csv时中文乱码问题解决办法

    参考1 参考2 参考3 CSV是英文Comma Separate Values(逗号分隔值)的缩写,顾名思义,文档的内容是由 "," 分隔的一列列的数据构成的,可以使用excel和 ...

  5. python csv 中文乱码_python读写csv时中文乱码问题解决办法

    CSV是英文Comma Separate Values(逗号分隔值)的缩写,顾名思义,文档的内容是由 "," 分隔的一列列的数据构成的,可以使用excel和文本编辑器等打开.CSV ...

  6. java.net.url 中文乱码_jsp get Url请求方式中文乱码问题解决办法

    本文章来给大家介绍关于jsp get Url请求方式中文乱码问题解决办法,有需要的朋友可参考. jsp中post方式请求一般不会乱码,如果乱码加上这句: 解决办法一 代码如下 复制代码 request ...

  7. python 保存本地乱码,解决python保存数据到csv文件中文乱码的方法

    解决python保存数据到csv文件中文乱码的方法 发布时间:2020-07-08 13:49:53 来源:亿速云 阅读:695 作者:清晨 小编给大家分享一下解决python保存数据到csv文件中文 ...

  8. SQL工具导出CSV文件中文乱码

    DBeaver 导出CSV文件中文乱码 相信在做IT开发的人都碰到过,中文乱码的问题.特别是做数据的工程是,经常有用sql查出一批数据后,要导成CSV文件时,发现导出的信息中,中文都是乱码:便会在网上 ...

  9. java控制台打印输出 中文乱码 解决办法

    java控制台打印输出 中文乱码 解决办法 问题:IDEA控制台打印时出现中文乱码 原因:java资源的编码和ideal的不一致 解决办法: 第一步 1:打开intelliidea安装路径,Intel ...

最新文章

  1. Cisco asa 5510升级IOS和ASDM
  2. Java工具类-转换字符编码
  3. python从入门到精通书-100G Python从入门到精通全套资料!
  4. 算法篇之-----滑动窗口(尺取法)
  5. prometheus和grafana、node_exporter监控服务资源
  6. android开发------Activity生命周期
  7. Android Material风格的应用(三)--DrawerLayout
  8. 文本光标,高亮选中一些出来
  9. 扫盲贴|如何评价一款App的稳定性和质量?
  10. 文献检索与论文写作书籍(一)
  11. 清除mysql数据碎片_MySQL 清除表空间碎片方法总结
  12. 《Python编程实战:运用设计模式、并发和程序库创建高质量程序》—— 导读
  13. Android5.1 Audio计算音量流程
  14. 计算机制作乘法表格,excel表格乘法怎么用,excel表格怎么算乘法
  15. 平面关系:平行,垂直,夹角判定
  16. java CRC32
  17. vscode Java语法检查_vscode eslint js代码检查工具
  18. SIMPLE ONLINE AND REALTIME TRACKING
  19. 表格组件列属性formatter和styler使用方法
  20. WEP 加密的工作原理和安全缺陷

热门文章

  1. 防止安卓手机进入休眠状态 cpu停止 导致应用死掉
  2. 华为笔试——字符串排序、去重、反转等算法(C语言版)
  3. vue调用数组_vue 数组方法
  4. SQL server 数据库导入(附加)和分离 数据库分离之后位置 复制数据库
  5. 计算机组装常见问题,组装电脑常见错误有哪些 组装电脑常见错误汇总【详细介绍】...
  6. Flash 8打造的一个超酷的Flash Web站点
  7. RK3588S Android12本地升级系统固件(OTA升级包)
  8. AXI总线学习-------从零开始详细学-------------连载(8)读数据通中字节通路,narrow transfer
  9. 跟涛哥一起学嵌入式07:GNU/Linux和Linux的区别
  10. numpy-ndarray数组的索引方式——三点号、半省略号的作用,以及None、numpy.newaxis的使用