javacsv导出

代码中采用的是GBK编码;

如果用UTF-8编码的话,用office打开会出现中文乱码,用UTF-8编码格式读取出来的数据也是正常的;但是用记事本打开就是正常;

代码如下:附带jar包和源文件

package com.willson.web.test.javacsv;

import java.io.IOException;
import java.nio.charset.Charset;
import java.util.ArrayList;
import java.util.List;

import com.csvreader.CsvReader;
import com.csvreader.CsvWriter;

public class JavaCsv {

	/**
	 * @param args
	 * @throws Exception
	 */
	public static void main(String[] args) throws Exception {

		final String[] header = new String[] { "name", "sex", "age" };
		final String[][] data = new String[][] { header, { "Lucy", "女", "22" },
				{ "Tom", "男", "25" }, { "Lily", "女", "19" } };

		writerCsv("测试.csv", header, data);

		readerCsv("测试.csv");
	}

	/**
	 * 读取csv
	 * 
	 * @param csvFilePath
	 * @throws Exception
	 */
	public static void readerCsv(String csvFilePath) throws Exception {

		CsvReader reader = new CsvReader(csvFilePath, ',', Charset
				.forName("GBK"));// shift_jis日语字体
		reader.readHeaders();
		String[] headers = reader.getHeaders();

		List<Object[]> list = new ArrayList<Object[]>();
		while (reader.readRecord()) {
			list.add(reader.getValues());
		}
		Object[][] datas = new String[list.size()][];
		for (int i = 0; i < list.size(); i++) {
			datas[i] = list.get(i);
		}

		/*
		 * 以下输出
		 */

		for (int i = 0; i < headers.length; i++) {
			System.out.print(headers[i] + "\t");
		}

		System.out.println("");

		for (int i = 0; i < datas.length; i++) {

			Object[] data = datas[i]; // 取出一组数据

			for (int j = 0; j < data.length; j++) {

				Object cell = data[j];
				System.out.print(cell + "\t");
			}

			System.out.println("");
		}
	}

	/**
	 * 写入csv
	 * 
	 * @param csvFilePath文件名路径
	 *            +文件名字
	 * @param header数据标头
	 * @param data数据项
	 */
	public static void writerCsv(String csvFilePath, String[] header,
			String[][] data) {

		CsvWriter writer = null;
		try {
			writer = new CsvWriter(csvFilePath, ',', Charset.forName("GBK"));// shift_jis日语字体

			for (int i = 0; i < data.length; i++) {
				writer.writeRecord(data[i]);
			}
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			writer.close();
		}
	}

}

 

在Java中导出CSV文件并控制列宽和行高时,通常CSV本身并不直接支持设置这些特性,因为它是文本格式,专注于数据交换而非格式化的显示。然而,你可以通过以下步骤创建美观的CSV文件: 1. 使用`java.io.FileWriter`或者第三方库如Apache Commons CSV来处理CSV。 2. 创建一个`BufferedWriter`对象,并指定文件路径。 ```java import java.io.FileWriter; import java.io.IOException; // 创建CSV文件对象,这里假设你有一个CSVWriter对象 CSVWriter writer = ...; try { // 写入每一行数据之前,可以先获取当前行的长度,然后调整制表符位置 String[] rowData = {...}; writer.writeNext(rowData); } catch (IOException e) { e.printStackTrace(); } ``` 3. 对于列宽,如果你知道某个字段的最大宽度,可以在写入时手动添加额外的空格或制表符来调整。例如: ```java String cellContent = "长内容"; int maxLength = 50; // 假设最大宽度为50字符 if (cellContent.length() > maxLength) { writer.write(new String[]{cellContent.substring(0, maxLength - 1) + "\t"}); // 添加制表符缩进 } else { writer.write(new String[]{cellContent}); } ``` 4. 控制行高通常是打印样式的问题,在CSV文件里并没有这样的概念,但在读取CSV后将其导入到像Excel这样的应用程序中,用户可以直接设置单元格高度。 由于CSV主要用于数据存储,而不是布局控制,所以大部分情况下你无法精确地控制每个单元格的具体行高。如果需要更复杂的表格展示,建议考虑使用专门的电子表格处理工具或者将CSV导出为其他格式(如XLSX),然后由目标应用自行处理格式。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值