java查数据导出txt或csv或excel

导出的工具类代码如下

CSV依赖包 commons-csv-1.4.jar
EXCEL依赖包 poi-3.9.jar

package common.utils.csv;

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.util.List;

import org.apache.commons.csv.CSVFormat;
import org.apache.commons.csv.CSVPrinter;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;

/**
 * 导出工具类
 * 
 * @author yulisao
 * @createDate 2018年9月4日
 */
public class ExportUtils {
	
	/**
	 * 生成csv文件
	 * 
	 * @author yulisao
	 * @date 2018年9月4日 下午2:31:17
	 * 
	 * @param header 表头
	 * @param dataList 数据列表
	 * @param outPath  写入路径
	 * @param fileName 文件名称
	 * @param lineSeparator  各记录列表分隔符
	 * @param recordSeparator 各数据项分隔符
	 * @return
	 */
	public static String exportCsvFile(Object[] header, List<List<Object>> dataList, String outPath, String fileName,
			String lineSeparator, char recordSeparator) {
		makeDir(outPath);
		FileWriter fileWriter = null;
		CSVPrinter csvFilePrinter = null;
		String path = outPath + File.separator + fileName + ".csv";
		long start = System.currentTimeMillis();
		// 创建 CSVFormat
		CSVFormat csvFileFormat = CSVFormat.DEFAULT.withRecordSeparator(lineSeparator).withDelimiter(recordSeparator);
		try {
			System.out.println("CSV文件创建开始");
			// 初始化FileWriter
			fileWriter = new FileWriter(path);
			// 初始化 CSVPrinter
			csvFilePrinter = new CSVPrinter(fileWriter, csvFileFormat);
			// 创建CSV文件头
			if (header != null && header.length > 0) {
				csvFilePrinter.printRecord(header);
			}
			// 遍历List写入CSV
			for (List<Object> dataRecord : dataList) {
				csvFilePrinter.printRecord(dataRecord);
				
			}
			long end = System.currentTimeMillis();

			System.out.println("CSV文件创建成功,用时" + (end - start) + "ms,文件输出路径:" + path);
			return path;
		} catch (Exception e) {
			System.out.println("CSV文件创建失败");
			e.printStackTrace();
		} finally {
			try {
				fileWriter.flush();
				fileWriter.close();
				csvFilePrinter.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
		return lineSeparator;
	}

	/**
	 * 生成 txt文件
	 * 
	 * @author yulisao
	 * @date 2018年9月4日 下午2:32:26
	 * 
	 * @param dataList 数据列表
	 * @param outPath  写入路径
	 * @param fileName 文件名称
	 * @param lineSeparator 各记录列表分隔符
	 * @param recordSeparator 各数据项分隔符
	 * @return
	 */
	public static String exportTxtFile(List<List<Object>> dataList, String outPath, String fileName,
			String lineSeparator, String recordSeparator) {
		makeDir(outPath);
		FileWriter fw = null;
		String path = outPath + File.separator + fileName + ".txt";
		File file = new File(path);
		long start = System.currentTimeMillis();
		try {
			System.out.println("txt文件创建开始");
			if (file.exists()) {
				System.out.println("已存在文件");
			}
			fw = new FileWriter(file);
			BufferedWriter bw = new BufferedWriter(fw);
			for (List<Object> list : dataList) {
				for (int i = 0; i < list.size(); i++) {
					Object o = list.get(i);
					if (o == null) {
						bw.write("");
					} else {
						bw.write(String.valueOf(o));
					}
					if (i < list.size() - 1) {
						bw.write(recordSeparator);
					}
				}
				bw.write(lineSeparator);
			}
			bw.flush();
			bw.close();
			long length = file.length();
			long end = System.currentTimeMillis();
			System.out.println("txt文件创建成功,用时" + (end - start) + "ms,文件大小 " + length + " byte,文件输出路径:" + path);
			return path;
		} catch (IOException e) {
			System.out.println("txt文件创建失败");
			e.printStackTrace();
		}
		return file.getAbsolutePath();
	}

	/**
	 * 导出excel
	 * 
	 * @author yulisao
	 * @date 2018年9月4日 下午3:23:26
	 * 
	 * @param colNm 表头中文字符串数组   {"用户ID","用户名","手机号"}
	 * @param dataList 数据行  
	 * @param outPath 输出路径
	 * @param fileName 文件名
	 */
	public static String exportExcelFile(String [] header, List<List<Object>> dataList, String outPath, String fileName) {
		System.out.println("excel文件创建开始");
		long start = System.currentTimeMillis();
		
		// 创建workbook
		HSSFWorkbook wb = new HSSFWorkbook();

		// 创建sheet
		HSSFSheet sheet = wb.createSheet("sheet1");
		sheet.setDefaultColumnWidth(15); // 设置所有列宽
		//sheet.setColumnWidth(2, 15 * 256); // 第3列设置列宽 15
		
		// 创建行row
		HSSFCellStyle style = wb.createCellStyle();
		style.setWrapText(true);// 自动换行
		FileOutputStream fileOut = null;
		HSSFRow row = sheet.createRow(0);	// 创建第一行: 表头
		
		// 表头的列逐个给值进去
		for (int i = 0; i < header.length; i++) {
			HSSFCell cell = row.createCell(i);
			cell.setCellValue(header[i]);
			cell.setCellStyle(style);
			sheet.setColumnWidth(i, 12*256); // 设置列宽
		}
		
		// 插入数据正文
		int num = 1; // 表头已占一行,所以这里从1开始
		for (List<Object> list : dataList) { // 循环数据行
			row = sheet.createRow(num); // 新建一行
			for (int i = 0; i < list.size(); i++) { // 循环每一行的列
				row.createCell(i).setCellValue(String.valueOf(list.get(i)));// 第i列
			}
			num++;
		}
		
		// 输出
		String path = outPath + File.separator + fileName + ".xls";
		File file = new File(path);
		try {
			fileOut = new FileOutputStream(path);
			wb.write(fileOut);
			fileOut.close();
			
			long length = file.length();
			long end = System.currentTimeMillis();
			System.out.println("excel文件创建成功,用时" + (end - start) + "ms,文件大小" + length + " byte,文件输出路径:" + path);
		} catch (IOException e) {
			System.out.println("e1=" + e);
		} finally {
			try {
				fileOut.close();
			} catch (IOException e2) {
				System.out.println("e2=" + e2);
			}
		}
		
		return file.getAbsolutePath();
	}
	
	/**
	 * 创建文件目录
	 * 
	 * @param outPath   
	 * @return void  
	 * 
	 * @author yulisao
	 * @date 2018年9月4日 下午2:34:45
	 */
	public static void makeDir(String outPath){
		File file = new File(outPath);
		if (!file.exists()) {
			file.mkdirs();
		}
	}

}

测试类:

package ExcelTest;

import java.util.ArrayList;
import java.util.List;
/**
 * 测试类
 * 
 * @author yulisao
 * @date 2018年9月4日 下午4:27:11
 */
public class ExportTest {
	
	public static void main(String[] args) {

		String filePath = "C:\\Users\\Administrator\\Desktop\\myoutfile";
		String fileName = "mytestfile";
		Object [] header = {"用户ID","用户名","手机号"};
		String [] header2 = {"用户ID","用户名","手机号"};
		final String NEW_LINE_SEPARATOR = "\r\n";
		final String separator = "|"; // 分隔符
		char recordSeparator = ',';
		
		List<List<Object>> dataList = new ArrayList<>();
			//用于存储一行数据
			List<Object> list = new ArrayList<Object>();
			//添加第一行第一个元素
			list.add(1);
			//添加第一行第二个元素
			list.add("张三");
			//添加第一行第三个元素
			list.add("15511110000");
			//.....添加第N个元素
			
			//将这一行添加	到大list里面		
			dataList.add(list);
			
			List<Object> list2 = new ArrayList<Object>();
			//添加第一行第一个元素
			list2.add(2);
			//添加第一行第二个元素
			list2.add("李四");
			//添加第一行第三个元素
			list2.add("13200001111");
			dataList.add(list2);
			
			List<Object> list3 = new ArrayList<Object>();
			//添加第一行第一个元素
			list3.add(3);
			//添加第一行第二个元素
			list3.add("王五");
			//添加第一行第三个元素
			list3.add("15799990000");
			dataList.add(list3);
			
			//导出 txt 
			ExportUtils.exportTxtFile(dataList, filePath, fileName, NEW_LINE_SEPARATOR, separator);
			//导出 csv 
			ExportUtils.exportCsvFile(header, dataList, filePath, fileName, NEW_LINE_SEPARATOR, recordSeparator);
			//导出 excel
			ExportUtils.exportExcelFile(header2, dataList, filePath, fileName);
	}

}

测试结果执行:
在这里插入图片描述
生成三个文件:
在这里插入图片描述
文本 和 csv/excel 内容:
在这里插入图片描述
在这里插入图片描述

上面的测试类写的是死数据进行测试,如需查询数据库,只需循环添加数据到dataList 即可。大致示例如下:

//查询数据库得到数据集合
List<MyBean> MyBean = yourService.queryMyBeanDataByDate(date);				
if (MyBean == null|| MyBean.isEmpty()) {
	return;
}

List<List<Object>> dataList = new ArrayList<>();
for (MyBean bean : MyBean) {
	//用于存储一行数据
	List<Object> list = new ArrayList<Object>();
	//添加第一行第一个元素
	list.add(bean.id);
	//添加第一行第二个元素
	list.add(bean.name);
	//添加第一行第三个元素
	list.add(bean.mobile);
	//.....添加第N个元素
	
	//将这一行添加	到大list里面		
	dataList.add(list);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值