一:主要内容
- 解决CsvWriter存csv,csv文件打开后中文乱码问题
- 解决CsvWriter存csv,csv文件最后一行总是多一行空行的问题
- 解决CsvWriter存csv,csv文件不是第一列的时候,想存入""即空字符串无法存入显示null的问题
二:解决问题前:需要做的事情
因为网上的CsvWrite的jar包导入到我们的工程中是class文件,针对上面的问题是无法修改源码的,但是我们又想用这个工具来操作csv,所以可以在自己的工程中首先pom引用这个jar包
<dependency>
<groupId>net.sourceforge.javacsv</groupId>
<artifactId>javacsv</artifactId>
<version>2.0</version>
</dependency>
然后我们在自己的工程中创建一个类:CsvWriterExtend来继承CsvWriter,这样我们就能用网上CsvWriter这个jar中的方法,还能基于这个去修改代码,解决上诉的问题
public class CsvWriterExtend extends CsvWriter {}
三:优化解决CsvWriter工具存在的三个问题:中文乱码、末尾行多一行空格(/r)、非第一列空字符串""显示null问题
此处废话不多说,先上CsvWriterExtend类的代码,然后我们在代码中红色标注的地方会有说明,这段用来解决什么问题的,说明一下:CsvWriterExtend代码只是在CsvWriter类的基础上做了一些修改
1 /** 2 * Copyright (C), 2015-2019, XXX有限公司 3 * FileName: CsvWriterExtend 4 * Author: yml 5 * Date: 2019/5/17 15:42 6 * Description: 7 * History: 8 * <author> <time> <version> <desc> 9 * 俞美玲 2019.5.17 1.0.0 优化CsvWriter工具 10 */ 11 package com.test.csv.tool; 12 13 import com.csvreader.CsvWriter; 14 15 import java.io.*; 16 import java.nio.charset.Charset; 17 18 /** 19 * @创建人 yumeiling 20 * @创建时间 2019/5/17 21 * @描述 优化CsvWriter工具,解决了写入csv打开后中文乱码问题,解决了写入csv最后一行有/r换行的问题 22 * 23 */ 24 public class CsvWriterExtend extends CsvWriter { 25 private PrintWriter outputStream; 26 private String fileName; 27 private boolean firstColumn; 28 private boolean useCustomRecordDelimiter; 29 private Charset charset; 30 private CsvWriterExtend.UserSettings userSettings; 31 private boolean initialized; 32 private boolean closed; 33 public static final int ESCAPE_MODE_DOUBLED = 1; 34 public static final int ESCAPE_MODE_BACKSLASH = 2; 35 private String sheetFirstName; 36 37 public CsvWriterExtend(String var1, char var2, Charset var3,String sheetFirstName) { 38 super(var1,var2,var3); 39 this.outputStream = null; 40 this.fileName = null; 41 this.firstColumn = true; 42 this.useCustomRecordDelimiter = false; 43 this.charset = null; 44 this.userSettings = new CsvWriterExtend.UserSettings(); 45 this.initialized = false; 46 this.closed = false; 47 //1:这里加了一个csv表头的第一个名字字段,用来解决第一个问题:中文乱码问题 48 this.sheetFirstName = sheetFirstName; 49 if (var1 == null) { 50 throw new IllegalArgumentException("Parameter fileName can not be null."); 51 } else if (var3 == null) { 52 throw new IllegalArgumentException("Parameter charset can not be null."); 53 } else { 54 this.fileName = var1; 55 this.userSettings.Delimiter = var2; 56 this.charset = var3; 57 } 58 } 59 60 public CsvWriterExtend(Writer var1, char var2) { 61 super(var1,var2); 62 this.outputStream = null; 63 this.fileName = null; 64 this.firstColumn = true; 65 this.useCustomRecordDelimiter = false; 66 this.charset = null; 67 this.userSettings = new CsvWriterExtend.UserSettings(); 68 this.initialized = false; 69 this.closed = false; 70 if (var1 == null) { 71 throw new IllegalArgumentException("Parameter outputStream can not be null."); 72 } else { 73 this.outputStream = new PrintWriter(var1); 74 this.userSettings.Delimiter = var2; 75 this.initialized = true; 76 } 77 } 78 79 public CsvWriterExtend(OutputStream var1, char var2, Charset va