解决CsvWriter:中文乱码、末尾行多一行空格(/r)、非第一列空字符串""显示null问题...

本文介绍了如何解决使用CsvWriter时遇到的中文乱码、csv文件末尾多余空行及非第一列空字符串显示为null的问题。通过创建CsvWriterExtend类继承CsvWriter,并在代码中进行关键修改,实现了对这些问题的有效处理。详细代码和解决方案可在作者的GitHub仓库找到。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 一:主要内容

  • 解决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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值