Java使用CSVPrinter框架导出csv文件

Java使用CSVPrinter框架导出csv文件

1.准备工作准备jar包
官方下载路径:http://commons.apache.org/proper/commons-csv/download_csv.cgi
如果是maven项目,可直接在pom.xml中添加依赖

<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-csv</artifactId>
    <version>1.4</version>
</dependency>

2.开发使用流程
2.1先初始化和进行配置相关属性。
可以先看下源码
在这里插入图片描述
里面的final属性都是定义导出csv格式。
newFormat(char delimiter):delimiter为csv文件中数据中的界定符号(用于一条数据多个属性的分隔),excel中默认逗号作为每一列的界定符号。
withQuote(Character quote) : quote 为csv文件每个字段通过quote引用,源码中用双引号,不用则添加属性null。
withRecordSeparator():csv文件中数据中的分隔符(用于多条数据的分隔)。
withHeader():表头
DEFAULT默认属性

  public static final CSVFormat DEFAULT = new CSVFormat(',', Constants.DOUBLE_QUOTE_CHAR, null, null, null, false, true, "\r\n", null, null, null, false, false, false, false, false);

属性方法可以叠加,即创建一个一个参数的实例,需要什么属性加什么属性举个自己demo的例子。

static String[] reportHeader=new String[]{"Number","name","money","age",
			"length"};
CSVFormat csvFormat = CSVFormat.newFormat(',').withQuote(null).withRecordSeparator("\r\n").withIgnoreEmptyLines(true).withHeader(reportHeader);

2.2准备输出流

FileOutputStream fos = new FileOutputStream(path);
OutputStreamWriter osw = new OutputStreamWriter(fos, "UTF-8");

CSV文件是UTF-8格式,Excel是ASCII码格式文件,两者不兼容,需要对UTF-8编码的CSV文件写入一个UTF-8的BOM头,确保其不会乱码。

byte[] uft8bom = { (byte) 0xef, (byte) 0xbb, (byte) 0xbf };
			fos.write(uft8bom);

注意这里的是byte[]数组,不需要改为String类型,因为String默认是UTF-16的编码。

2.3准备写入数据
将初始化的csvFormat和输出流写入CSVPrinter对象中,这样准备工作就做好了,接下来的就是写入数据了。

CSVPrinter csvprinter = new CSVPrinter(osw, csvFormat);

写入数据,数据内容只是为了测试,并不要太在意是啥。

for(int i=0;i<10;i++){
	
		csvprinter.printRecord(i,"张三"+i,i+"000.00",i*2,"17"+i);
		}
		System.out.println("导入成功");
		csvprinter.flush();
		csvprinter.close();
		}catch(Exception e){
			e.printStackTrace();
			System.out.println("导入失败");
		
		
		}

数据可能会含有逗号或者双引号这样就会导致错位
处理方法有几种自己摸索的,不一定每个时候都能使用
1.再添加个双引号替换一个双引号,在数据前后添加空格均可。

public String escape(String str) {
		String handleStr = str;
		if (str != null && !"".equals(str)) {
			if(!str.contains(",")&&!str.contains("\"")){
				handleStr="\t" +handleStr+"\t";
			}
			if (str.contains(",")) {
				if (str.contains("\"")) {
					handleStr = str.replace("\"", "\"\"");
				}
				handleStr = "\"" + handleStr + "\"";
			} else if (str.contains("\"")) {
				handleStr = str.replace("\"", "\"\"");
			}
			
			if(str.contains("\"")){
				handleStr = str.replace("\"", "\"\"");
			}
		}
		return handleStr;
	}

这样用excel打开是没什么问题,但是用文本打开就会导致数据不美观,会出现很多个双引号和数据前后存在空格
2.前面初始化使用withQuote(null)在printRecord插入数据对每个数据都加个双引号。
测试结果
这边使用notepad和wps都打开一遍。
在这里插入图片描述
在这里插入图片描述
都没出现乱码和错位的问题。

使用Quarkus框架导出包含中文内容的CSV文件时,你可以按照以下步骤进行操作: 1. 首先,确保你已在项目的构建工具(如Maven或Gradle)中添加了`org.apache.commons:commons-csv`依赖项。 2. 创建一个包含中文数据的POJO类,例如`Person`类: ```java public class Person { private String name; private int age; public Person(String name, int age) { this.name = name; this.age = age; } // Getter and setter methods } ``` 3. 在需要导出CSV文件的地方,创建一个`List`来存储数据对象,然后使用`CSVPrinter`类将数据写入CSV文件。以下是一个简单的例子: ```java import org.apache.commons.csv.CSVFormat; import org.apache.commons.csv.CSVPrinter; import java.io.FileWriter; import java.io.IOException; import java.util.ArrayList; import java.util.List; public class CsvExporter { public static void exportToCsv(List<Person> persons, String filePath) throws IOException { try (FileWriter writer = new FileWriter(filePath); CSVPrinter csvPrinter = new CSVPrinter(writer, CSVFormat.DEFAULT.withHeader("Name", "Age"))) { for (Person person : persons) { csvPrinter.printRecord(person.getName(), person.getAge()); } csvPrinter.flush(); } } public static void main(String[] args) { List<Person> persons = new ArrayList<>(); persons.add(new Person("张三", 25)); persons.add(new Person("李四", 30)); persons.add(new Person("王五", 35)); try { exportToCsv(persons, "output.csv"); System.out.println("CSV file exported successfully."); } catch (IOException e) { System.out.println("Error while exporting CSV file: " + e.getMessage()); } } } ``` 在上面的例子中,我们创建了一个`Person`类来表示人员信息,然后使用`CSVPrinter`类将数据写入CSV文件。`CSVFormat.DEFAULT.withHeader("Name", "Age")`用于指定CSV文件的列头。 注意,我们在`exportToCsv`方法中使用Java 7中的try-with-resources语句,以确保文件资源在使用完之后正确关闭。 运行这个例子后,你将在项目根目录下找到一个名为`output.csv`的文件,其中包含了中文内容的CSV数据。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值