package com.mobanker.tkj.cw.core.util;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.beanutils.BeanUtils;
import org.apache.log4j.Logger;
public class CSVUtils
{
static Logger logger=Logger.getLogger(CSVUtils.class);
/**
* 生成为CVS文件
* @param exportData
* 源数据List
* @param map
* csv文件的列表头map
* @param outPutPath
* 文件路径
* @param fileName
* 文件名称
* @return
*/
@SuppressWarnings("rawtypes")
public static File createCSVFile(List<Map> exportData, Map map, String outPutPath,
String fileName) {
File csvFile = null;
BufferedWriter csvFileOutputStream = null;
try {
File file = new File(outPutPath);
if (!file.exists()) {
file.mkdir();
}
//定义文件名格式并创建
// csvFile = File.createTempFile(fileName, ".csv", new File(outPutPath));
csvFile = new File(outPutPath, fileName+".csv");
logger.debug(">>>>>>>>>>>>>>>>>>csvFile:" + csvFile);
// UTF-8使正确读取分隔符","
csvFileOutputStream = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(csvFile), "UTF-8"), 1024);
System.out.println("csvFileOutputStream:" + csvFileOutputStream);
// 写入文件头部
for (Iterator propertyIterator = map.entrySet().iterator(); propertyIterator.hasNext();) {
java.util.Map.Entry propertyEntry = (java.util.Map.Entry) propertyIterator.next();
csvFileOutputStream.write("" + (String) propertyEntry.getValue() != null ? (String) propertyEntry.getValue() : "" + "");
if (propertyIterator.hasNext()) {
csvFileOutputStream.write(",");
}
}
csvFileOutputStream.newLine();
// 写入文件内容
for (Iterator iterator = exportData.iterator(); iterator.hasNext();) {
Object row = (Object) iterator.next();
for (Iterator propertyIterator = map.entrySet().iterator(); propertyIterator
.hasNext();) {
java.util.Map.Entry propertyEntry = (java.util.Map.Entry) propertyIterator
.next();
if(propertyEntry.getKey()!=null&&BeanUtils.getProperty(row,(String) propertyEntry.getKey())!=null){
csvFileOutputStream.write((String) BeanUtils.getProperty(row,(String) propertyEntry.getKey()));
}
if (propertyIterator.hasNext()) {
csvFileOutputStream.write(",");
}
}
if (iterator.hasNext()) {
csvFileOutputStream.newLine();
}
}
csvFileOutputStream.flush();
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
csvFileOutputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return csvFile;
}
/**
*
* <b>Description:</b>〈方法详细描述〉<br/>
* @param exportData
* @param map
* @param csvFile
* @return
* @author gaohailiang <br/>
* Create date: 2016年12月9日
* @throws IOException
*/
public static File apendCSVFile(List<Map> exportData, Map map, File csvFile) throws IOException {
BufferedWriter csvFileOutputStream = null;
try {
// UTF-8使正确读取分隔符","
csvFileOutputStream = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(csvFile,true), "UTF-8"), 1024);
System.out.println("csvFileOutputStream:" + csvFileOutputStream);
// 写入文件内容
for (Iterator iterator = exportData.iterator(); iterator.hasNext();) {
Object row = (Object) iterator.next();
for (Iterator propertyIterator = map.entrySet().iterator(); propertyIterator.hasNext();) {
java.util.Map.Entry propertyEntry = (java.util.Map.Entry) propertyIterator
.next();
if(propertyEntry.getKey()!=null&&BeanUtils.getProperty(row,(String) propertyEntry.getKey())!=null){
csvFileOutputStream.write((String) BeanUtils.getProperty(row,(String) propertyEntry.getKey()));
}
if (propertyIterator.hasNext()) {
csvFileOutputStream.write(",");
}
}
csvFileOutputStream.newLine();
}
csvFileOutputStream.flush();
exportData.clear();
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
csvFileOutputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return csvFile;
}
/**
* 下载文件
* @param response
* @param csvFilePath
* 文件路径
* @param fileName
* 文件名称
* @throws IOException
*/
public static void exportFile(HttpServletResponse response, String csvFilePath, String fileName)
throws IOException {
response.setContentType("application/csv;charset=UTF-8");
response.setHeader("Content-Disposition",
"attachment; filename=" + URLEncoder.encode(fileName, "UTF-8"));
InputStream in = null;
try {
in = new FileInputStream(csvFilePath);
int len = 0;
byte[] buffer = new byte[1024];
response.setCharacterEncoding("UTF-8");
OutputStream out = response.getOutputStream();
while ((len = in.read(buffer)) > 0) {
out.write(new byte[] { (byte) 0xEF, (byte) 0xBB, (byte) 0xBF });
out.write(buffer, 0, len);
}
} catch (FileNotFoundException e) {
System.out.println(e);
} finally {
if (in != null) {
try {
in.close();
} catch (Exception e) {
throw new RuntimeException(e);
}
}
}
}
/**
* 删除该目录filePath下的所有文件
* @param filePath
* 文件目录路径
*/
public static void deleteFiles(String filePath) {
File file = new File(filePath);
if (file.exists()) {
File[] files = file.listFiles();
for (int i = 0; i < files.length; i++) {
if (files[i].isFile()) {
files[i].delete();
}
}
}
}
/**
* 删除单个文件
* @param filePath
* 文件目录路径
* @param fileName
* 文件名称
*/
public static void deleteFile(String filePath, String fileName) {
File file = new File(filePath);
if (file.exists()) {
File[] files = file.listFiles();
for (int i = 0; i < files.length; i++) {
if (files[i].isFile()) {
if (files[i].getName().equals(fileName)) {
files[i].delete();
return;
}
}
}
}
}
/**
* 测试数据
* @param args
*/
@SuppressWarnings({ "rawtypes", "unchecked" })
public static void main(String[] args) {
List exportData = new ArrayList<Map>();
Map row1 = new LinkedHashMap<String, String>();
row1.put("1", "11");
row1.put("2", "12");
row1.put("3", "13");
row1.put("4", "14");
exportData.add(row1);
row1 = new LinkedHashMap<String, String>();
row1.put("1", "21");
row1.put("2", "22");
row1.put("3", "23");
row1.put("4", "24");
exportData.add(row1);
LinkedHashMap map = new LinkedHashMap();
map.put("1", "第一列");
map.put("2", "第二列");
map.put("3", "第三列");
map.put("4", "第四列");
String path = "c:/export/";
String fileName = "文件导出";
File file = CSVUtils.createCSVFile(exportData, map, path, fileName);
String fileName2 = file.getName();
System.out.println("文件名称:" + fileName2);
}
}
- 浏览: 313754 次
- 性别:
- 来自: 上海
最新评论
-
NEOGX:
http://www.tuicool.com/articles ...
Json转换利器Gson之实例一-简单对象转化和带泛型的List转化 -
么可k:
可以喔
Can not find the tag library descriptor for "http://java.sun.com/j... -
tianyi_qingwu:
解决了我的一个问题,学习了,谢谢!
Ant+Flex: Java Heap Space -
ldci3gandroid:
if(month==0){ year-=1;mont ...
java获取当前日期一个月后的日期 -
djcbpl:
好像不行啊!我放进去了,还是错的啊
Can not find the tag library descriptor for "http://java.sun.com/j...
相关推荐
CSV文件由任意数目的记录组成,记录间以某种换行符分隔;每条记录由字段组成,字段间的分隔符是其它字符或字符串,最常见的是逗号或制表符。通常,所有记录都有完全相同的字段序列。 CSV是一种通用的、相对简单的...
在这个项目中,首先,CSVUtils将生成或处理CSV文件,然后FileZipUtils将这些CSV文件压缩成一个ZIP文件。接着,FTPUtils使用FTP协议将这个ZIP文件上传到远程FTP服务器。IOUtil则在整个过程中提供辅助的I/O操作,例如...
在我们需求中需要读取一个csv文件的数据,但是只有旧的csv的几列数据再新写入一个csv文件,而且在旧的数据有空的数据,需要判断旧的csv的空值。可能写的存在不完善!但是应用的需求里面还是能用的
在实际应用中,CSV文件合并工具通常适用于数据分析、报表生成、数据库导入导出等多种场景。无论是企业内部的数据整理,还是跨部门的数据共享,都能够显著提高数据处理效率。使用该工具,用户可以避免手动操作带来的...
这个“csv文件解析小工具”是专为处理这类文件而设计的,允许用户直接运行并解析CSV内容。 解析CSV文件的主要挑战在于处理各种边缘情况,例如: 1. **字段内包含逗号**:当某个字段值本身含有逗号时,通常会用双...
5. 点击开始或分割按钮,工具将自动完成分割过程,生成多个小的CSV文件。 在实际应用中,这个工具可能适用于数据分析师、程序员、数据库管理员等需要处理大量数据的人员。它简化了大CSV文件的管理和分析流程,使得...
3. **拆分过程**:工具会读取大CSV文件,按预设规则分割,然后将每个部分保存为新的CSV文件。拆分过程中可能需要考虑保留原始列名,并确保新文件的正确性。 4. **效率与性能**:为了提高拆分效率,工具可能采用流式...
在Qt中,生成CSV文件主要涉及到`QFile`、`QTextStream`和可能的`QStringList`类。`QFile`用于打开和关闭文件,而`QTextStream`则允许我们以文本格式读写数据。首先,创建一个`QFile`对象,指定要创建的CSV文件路径。...
总之,Java生成CSV文件时,要确保正确设置编码(如UTF-8)并考虑是否需要BOM。在处理非ASCII字符时,尤其要注意这一点,以防止出现乱码。此外,示例代码提供了一个基本的CSV文件读写框架,但实际应用中可能需要根据...
本篇文章将深入探讨如何使用univocity-parsers库来创建CSV文件,以及如何利用JSCH库将生成的CSV文件上传到SFTP(Secure File Transfer Protocol)服务器。 首先,让我们了解univocity-parsers库。这是一个强大的...
为了解决这个问题,开发者可以转向生成CSV文件,因为CSV文件本质上是文本文件,生成和读取都非常高效。 【Java生成CSV文件的方法】 以下是一个简单的Java类`CsvUtil`,用于导出CSV格式的文件: ```java public ...
尽管POI主要设计为处理XLS和XLSX格式,但通过简单的转换,我们也能利用它生成CSV文件。 首先,我们需要在项目中引入Apache POI的依赖。如果你使用的是Maven,可以在pom.xml文件中添加以下依赖: ```xml ...
本话题关注的是如何使用C#编程语言来实现一个工具,将多个CSV文件合并为一个单一的CSV文件,同时支持忽略列头。 首先,我们要理解CSV文件的结构。CSV文件是一种纯文本文件,每一行代表一行数据,列与列之间由逗号...
在处理CSV文件时,尤其是涉及中文字符时,可能会遇到乱码问题。这个问题通常与字符编码设置有关。下面我们将深入探讨如何在Java中正确地读取和写入CSV文件,以及解决中文乱码的问题。 1. **字符编码的理解**: - ...
7. `commons-collections-3.2.1.jar`:Apache Commons Collections库,提供了各种集合操作的实用工具类,可能用于数据处理和转换。 总结来说,这个Java工具是一个高效的数据导出解决方案,尤其针对Oracle数据库,它...
下面将详细解释如何使用Java生成CSV文件,以`CSVUtils`类为例进行说明。 首先,`CSVUtils`类通常包含用于生成CSV文件的核心方法。在给出的代码中,`createCSVFile`方法是生成CSV文件的主要入口。该方法接收四个参数...
3. **读取CSV文件**:使用C++标准库中的`fstream`类读取CSV文件的内容。确保正确处理文件的读取错误和结束标志。 4. **加密数据**:将读取到的CSV内容作为明文,使用AES的加密函数进行加密。在Crypto++库中,这通常...
因此,"csv大文件打开器"应运而生,这类工具专门设计用于处理大型CSV文件。 CSV文件的结构: 1. CSV文件以逗号作为字段分隔符,每一行代表一条记录,每个字段间用逗号分隔。如果字段内包含逗号,通常会使用引号进行...
4. **写入数据**:如果需要将数据写入CSV文件,可以使用`StreamWriter`类。首先创建一个`StreamWriter`实例,然后逐行写入数据,每一行结束时调用`WriteLine`。 5. **CSV文件操作示例**: - **内容相加**:假设...
在Java开发中,掌握如何使用OpenCSV这样的库处理CSV文件是一项基本技能,特别是在数据导入导出、数据分析和报告生成等场景中,它的作用尤为重要。理解并熟练运用OpenCSV可以极大地提升工作效率,降低代码复杂性。