`
grape927
  • 浏览: 75649 次
  • 性别: Icon_minigender_2
  • 来自: 深圳
社区版块
存档分类
最新评论

导出CSV文件

    博客分类:
  • JAVA
 
阅读更多

 

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStreamWriter;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.apache.commons.io.IOUtils;
import org.apache.commons.lang.StringUtils;
import org.apache.log4j.Logger;

import com.alibaba.fastjson.JSONObject;
import com.vservice.es.encaplables.LableForEnCh;

public class CSVUtils {

	private static final Logger logger = Logger.getLogger(CSVUtils.class);

	static Map<String, String> titles = new HashMap<String, String>();

	static {
		
		// 首行列对应的中文名
		Map<String, String> titleCName = new HashMap<String, String>();
		titleCName.put("name", "姓名");
		titleCName.put("gender", "性别");
		
		// 列排序用
		List<String> titleList = new ArrayList<String>();
		titleList.add("name");	 // 姓名	
		titleList.add("gender");  // 性别			
		
		List<String> titleNameList = new ArrayList<String>();
		String lableName = null;
		for (String string : titleList) {
			lableName = titleCName.get(string);
			titleNameList.add(StringUtils.isNotBlank(lableName) ? lableName : "");
		}

		for (int i = 0; i < titleList.size(); i++) {
			// 根据titleList先后顺序排序
                        titles.put(i + titleList.get(i), titleNameList.get(i));
		}
	}

	public static boolean createCSVFile(List<JSONObject> jsonArray, String exportPath) {
		long begin = System.currentTimeMillis();

		File csvFile = null;
		BufferedWriter csvWtriter = null;
		FileOutputStream fos = null;
		OutputStreamWriter osw = null;
		try {
			String ePath = exportPath + File.separator + System.nanoTime() + ".csv";
			csvFile = new File(ePath);
			fos = new FileOutputStream(csvFile);
			osw = new OutputStreamWriter(fos);
			// bom utf-8格式保存文件
			osw.write(new String(new byte[] { (byte) 0xEF, (byte) 0xBB,(byte) 0xBF }));  
			
			csvWtriter = new BufferedWriter(osw, 1024);
			
			String[] tilteKeys = getTilteKeys();
			StringBuffer head = new StringBuffer();
			StringBuffer rowS = null;

			for (int i = 0; i < jsonArray.size(); i++) {
				if (null == rowS) {
					rowS = new StringBuffer();
				}
				JSONObject obj = jsonArray.get(i);
				for (int j = 0; j < tilteKeys.length; j++) {
					if (i == 0) {
						String tille = titles.get(j + tilteKeys[j]);
						head.append("\"").append(tille).append("\",");
						if (j == tilteKeys.length - 1) {
							csvWtriter.write(head.toString());
							csvWtriter.newLine();
						}
					}
 
					String title = (String) tilteKeys[j];
					String value = obj.getString(title);
					if (StringUtils.isNotBlank(value) && StringUtils.isNumeric(value)) {
						value = value + "\t";
					}
					rowS.append("\"").append(StringUtils.isNotBlank(value) ? value : "").append("\",");
					if (j == tilteKeys.length - 1) {
						csvWtriter.write(rowS.toString());
						csvWtriter.newLine();
						rowS = null;
					}
				}
			}
			csvWtriter.flush();
			return true;
		} catch (Exception e) {
			logger.error(e.getMessage(), e);
		} finally {
			IOUtils.closeQuietly(csvWtriter);
			IOUtils.closeQuietly(fos);
			IOUtils.closeQuietly(osw);
			long end = System.currentTimeMillis();
			logger.info("export use time :" + (end - begin) + "ms");
		}

		return false;
	}
	
	private static String getNum(String str) {
		str = str.trim();
		String num = "";
		if (str != null && !"".equals(str)) {
			for (int i = 0; i <= 3; i++) {
				if (str.charAt(i) >= 48 && str.charAt(i) <= 57) {
					num += str.charAt(i);
				}
			}
		}
		return num;
	}

	private static String[] getTilteKeys() {
		Object[] keys = titles.keySet().toArray();
		String[] tilteKeys = new String[keys.length];
		for (int i = 0; i < keys.length; i++) {
			String temp = keys[i].toString();
			String numStr = getNum(temp);
			int orderNum = Integer.valueOf(numStr);
			tilteKeys[orderNum] = temp.substring(numStr.length());
		}
		return tilteKeys;
	}

	public static void main(String args[]) {
		try {
			List<JSONObject> listData = new ArrayList<JSONObject>();
			JSONObject vo = new JSONObject();
			vo.put("gender", "男");
			vo.put("name", "李斯");
			listData.add(vo);

			String path = "D:/006_test/";
			File file = new File(path);
			if (!file.exists()) {
				if (file.getParentFile().exists()) {
					file.getParentFile().mkdirs();
				}
				file.createNewFile();
			}

			createCSVFile(listData, path);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

}


  

分享到:
评论

相关推荐

    thinkphp下 导入导出csv文件

    标题"thinkphp下导入导出csv文件"涉及到的主要知识点包括: 1. CSV文件格式:CSV文件是以逗号分隔的纯文本文件,每个记录占据一行,每个字段之间由逗号分隔。这种格式使得数据可以轻松地在各种应用程序之间传递,如...

    1-Gbase导出csv文件教程

    1-Gbase导出csv文件教程

    Java导出CSV文件

    java导出数据时,如果对数据格式没有特殊要求,为了提高效率可以导出CSV格式的文件,导出CSV文件不支持多个sheet页。

    java导出csv文件并压缩(含下载提示功能)

    通过以上步骤,你已经实现了在Java中导出CSV文件,然后将其压缩成ZIP格式,并提供了一个Web接口供用户下载。确保正确配置你的服务器和文件路径,以适应实际项目的需求。同时,不要忘记处理可能出现的异常,以确保...

    ASP.NET导出CSV文件

    导出CSV文件的基本过程包括以下步骤: 1. **数据准备**:首先,你需要获取要导出的数据。这通常来自数据库查询,但也可能是内存中的数据结构,如List或DataTable。确保数据正确无误且符合预期格式。 2. **响应设置...

    asp.net导出csv文件

    ASP.NET 导出 CSV 文件 本文档将详细介绍如何使用 ASP.NET 导出 CSV 文件,包括相关的代码实现和知识点解析。 标题解释 ASP.NET 导出 CSV 文件是指使用 ASP.NET 框架将数据导出到 CSV 文件格式中。CSV(Comma ...

    csv.js导出csv格式文件

    `csv.js`库为JavaScript开发者提供了强大且灵活的CSV处理能力,无论是解析还是导出CSV文件,都能轻松应对。通过熟练掌握`csv.js`,你可以更高效地在Web应用中处理CSV数据,提升开发效率。在实际项目中,根据具体需求...

    java 浏览器导出csv文件

    1.浏览器点击导出按钮,直接下载到本地,服务器不生成临时文件; 2.生成csv,中文无乱码,数据不会科学计数法; 3.支持大数据下载; 4.后台服务java语言实现,前端不限制; 5.前端代码: [removed]void(0)" class=...

    jsp导出csv文件

    使用io流写如文件导出csv文件,使用jsp实现。简单的方法可以推广!

    fastadmin 导出csv文件

    fastadmin 导出csv文件

    php导出csv文件无乱码示例

    然而,由于编码问题,有时在导出CSV文件时会出现乱码。本示例将详细讲解如何使用PHP正确地导出CSV文件,避免出现乱码情况,并介绍相关的关键知识点。 首先,我们需要了解字符编码的基本概念。在处理文本数据时,...

    sqlserver-查询导出csv文件.sql

    sqlserver数据库用,指定查询语句执行后导出指定路径下生成csv文件

    oracle,teradata,hive,gbase,db2数据库导出csv命令总结

    ### Oracle、Teradata、Hive、GBase、DB2 导出 CSV 文件命令总结 #### 一、Oracle 数据库导出 CSV 文件 ##### 1. 通过 Spool 指令实现 Oracle 提供了 `spool` 命令来帮助我们将查询结果输出到一个文本文件中,...

    ruby导出csv文件

    然后,我们可以开始编写Ruby代码来导出CSV文件。以下是一个基本示例,展示了如何创建并写入CSV文件: ```ruby require 'fastercsv' # 定义要导出的数据 data = [ ['Name', 'Age', 'City'], ['John', 30, 'New ...

    java实现导出csv文件并上传sftp

    综上所述,通过使用univocity-parsers库,我们可以在Java后端将数据导出为CSV文件,然后利用JSch库将生成的CSV文件安全地上传到SFTP服务器。这个过程涉及到了文件操作、网络传输和安全性等多个方面的知识,对于开发...

    大量数据库导出csv.sql

    大量数据库导出csv,一般的通过PLSQL导出csv文件,但对于数据量较大时,则需要通过数据库内部去调用存储过程去导出,这样效率会高出很多

    一个用servlet实现导出csv文件的实例

    在这个实例中,"一个用servlet实现导出csv文件的实例 - Java编程.htm"可能是博主分享的详细代码示例,而"一个用servlet实现导出csv文件的实例 - Java编程_files"可能包含与文章相关的其他辅助文件。在实际操作中,你...

    Asp.net 导出Excel文件总结(导出csv、Office COM组建、Jet OLEDB、NPOI)

    1. **导出CSV文件** CSV(Comma Separated Values)是一种通用的文件格式,大多数电子表格软件如Excel都可以打开。在Asp.net中,我们可以直接将数据写入到Response流中,以逗号分隔的方式生成CSV文件。优点是简单...

    Oracle导出成csv格式后显示乱码的解决方法

    总之,解决Oracle导出CSV文件显示乱码的关键在于理解字符编码和数据解析的过程。通过正确设置文件的编码和应用正确的分隔符,可以确保数据在不同程序间顺利转换并保持可读性。如果上述方法无效,可能需要检查数据库...

    poi导出cvs文件

    标题中的“poi导出csv文件”指的是使用Apache POI库来生成CSV(逗号分隔值)文件。Apache POI是Java中一个流行的库,它主要用于处理Microsoft Office格式的文件,如Excel。在这个场景中,我们将探讨如何使用POI来...

Global site tag (gtag.js) - Google Analytics