csv导入和导出(服务端)

合集下载
相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

1、CSV导入/导出封装类
package com.parami.utils;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.util.ArrayList;
import java.util.List;

/**
* CSV操作(导出和导入)
*
* @author 林计钦
* @version 1.0 Jan 27, 2014 4:30:58 PM
*/
public class CSVUtils {

/**
* 导出
*
* @param file csv文件(路径+文件名),csv文件不存在会自动创建
* @param dataList 数据
* @return
*/
public static boolean exportCsv(File file, List dataList){
boolean isSucess=false;

FileOutputStream out=null;
OutputStreamWriter osw=null;
BufferedWriter bw=null;
try {
out = new FileOutputStream(file);
osw = new OutputStreamWriter(out);
bw =new BufferedWriter(osw);
if(dataList!=null && !dataList.isEmpty()){
for(String data : dataList){
bw.append(data).append("\r");
}
}
isSucess=true;
} catch (Exception e) {
isSucess=false;
}finally{
if(bw!=null){
try {
bw.close();
bw=null;
} catch (IOException e) {
e.printStackTrace();
}
}
if(osw!=null){
try {
osw.close();
osw=null;
} catch (IOException e) {
e.printStackTrace();
}
}
if(out!=null){
try {
out.close();
out=null;
} catch (IOException e) {
e.printStackTrace();
}
}
}

return isSucess;
}

/**
* 导入
*
* @param file csv文件(路径+文件)
* @return
*/
public static List importCsv(File file){
List dataList=new ArrayList();

BufferedReader br=null;
try {
br = new BufferedReader(new FileReader(file));
String line = "";
while ((line = br.readLine()) != null) {
dataList.add(line);
}
}catch (Exception e) {
}finally{
if(br!=null){
try {
br.close();
br=null;
} catch (IOException e) {
e.printStackTrace();
}
}
}

return dataList;
}
}

2、CSV导入/导出测试

package junit.test;

import java.io.File;
import java.util.ArrayList;
import ja

va.util.List;

import org.junit.Test;

import com.parami.utils.CSVUtils;

/**
* CSV操作(导出和导入)
*
* @author 林计钦
* @version 1.0 Jan 27, 2014 4:17:02 PM
*/
public class CsvTest {

/**
* CSV导出
*
* @throws Exception
*/
@Test
public void exportCsv() {
List dataList=new ArrayList();
dataList.add("1,张三,男");
dataList.add("2,李四,男");
dataList.add("3,小红,女");
boolean isSuccess=CSVUtils.exportCsv(new File("D:/test/ljq.csv"), dataList);
System.out.println(isSuccess);
}

/**
* CSV导出
*
* @throws Exception
*/
@Test
public void importCsv() {
List dataList=CSVUtils.importCsv(new File("D:/test/ljq.csv"));
if(dataList!=null && !dataList.isEmpty()){
for(String data : dataList){
System.out.println(data);
}
}
}


}



第二种方法
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;


public class CSVUtil {

public static File createCSVFile(List exportData, LinkedHashMap rowMapper,
String outPutPath, String filename) {

File csvFile = null;
BufferedWriter csvFileOutputStream = null;
try {
csvFile = new File(outPutPath + filename + ".csv");
// csvFile.getParentFile().mkdir();
File parent = csvFile.getParentFile();
if (parent != null && !parent.exists()) {
parent.mkdirs();
}
csvFile.createNewFile();

// GB2312使正确读取分隔符","
csvFileOutputStream = new BufferedWriter(new OutputStreamWriter(
new FileOutputStream(csvFile), "GB2312"), 1024);
// 写入文件头部
for (Iterator propertyIterator = rowMapper.entrySet().iterator(); propertyIterator.hasNext();) {
java.util.Map.Entry propertyEntry = (java.util.Map.Entry) propertyIterator
.next();
csvFileOutputStream.write("\""
+ propertyEntry.getValue().toString() + "\"");
if (propertyIterator.hasNext()) {
csvFileOutputStream.write(",");
}
}
csvFileOutputStream.newLine();




// 写入文件内容
for (Iterator iterator = exportData.iterator(); iterator.hasNext();) {
// Object row = (Object) iterator.next();
LinkedHashMap row = (LinkedHashMap) iterator.next();
System.out.print

ln(row);

for (Iterator propertyIterator = row.entrySet().iterator(); propertyIterator.hasNext();) {
java.util.Map.Entry propertyEntry = (java.util.Map.Entry) propertyIterator.next();
// System.out.println( BeanUtils.getProperty(row, propertyEntry.getKey().toString()));
csvFileOutputStream.write("\""
+ propertyEntry.getValue().toString() + "\"");
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;
}

public static void main(String[] args) {
List exportData = new ArrayList();
Map row1 = new LinkedHashMap();
row1.put("1", "11");
row1.put("2", "12");
row1.put("3", "13");
row1.put("4", "14");
exportData.add(row1);
row1 = new LinkedHashMap();
row1.put("1", "21");
row1.put("2", "22");
row1.put("3", "23");
row1.put("4", "24");
exportData.add(row1);
List propertyNames = new ArrayList();
LinkedHashMap map = new LinkedHashMap();
map.put("1", "第一列");
map.put("2", "第二列");
map.put("3", "第三列");
map.put("4", "第四列");
CSVUtil.createCSVFile(exportData, map, "d:/", "12");
}
}


java utf8字符 导出csv 文件的乱码问题。

utfcsvjavabom
一个同事遇到utf-8 导出到csv文件时出现乱码。
上网查了一下,需要一个BOM头。MS的东西就是麻烦。
加上头,问题解决。
现在把参考代码贴出来,也留个记录。
这只是在同事测试代码上面改的。

所以写起来比较随意。见谅。


Java代码 收藏代码
private static void writeBcp( ) throws IOException
{
//Create bcp file if not exist
File bcpFile = new File("test.csv");
//bcpFile.delete();
byte[] bom ={(byte) 0xEF,(byte) 0xBB,(byte) 0xBF};
//boolean newFile = false;
FileOutputStream bcpFileWriter = new FileOutputStream(bcpFile);
bcpFileWriter.write(bom);
//bcpFile.delete();
String title = "\"MD5\",\"扫描文件名\",\"扫描时间\"," +
"\"是否病毒\",\"安全等级\",\"病毒英文名称\",

" +
"\"病毒变种\",\"病毒类型\",\"病毒影响\"," +
"\"感染系统\",\"传播方式\",\"备注\"";


bcpFileWriter.write((new String(title.getBytes(), "utf-8")).getBytes());
bcpFileWriter.write("\n".getBytes());

String appStr = "\""+123+"\","
+"\""+123+"\","
+123+","
+123+","
+123+","
+"\""+123+"\","
+"\"\","
+123+","
+"\""+123+"\","
+"\""+123+"\","
+"\""+123+"\","
+"\""+123+"\"\n";


bcpFileWriter.write(appStr.getBytes());
bcpFileWriter.close();

}


第三种方法
在Java Web开发中,经常需要导出大量的数据到Excel,使用POI、JXL直接生成Excel,很容易就造成内存溢出了。

1、有一种方式,就是把数据写成csv格式文件。

1)csv文件可以直接用Excel打开。

2)写csv文件的效率和写txt文件的效率一样高。

3)同样的数据内容,生成的csv文件的大小远远小于生成的Excel文件。

从以上优点就可以看出生成csv文件消耗的内存绝对小于生成Excel文件。

2、按一定的格式去生成csv文件,在Excel中打开的时候就是完整的行和列格式。

例如:在Excel中的格式:



那么,在csv文件中格式就必须为:



就是说,列和列之间,需要用英文输入法状态下的逗号","间隔:风云第一刀,古龙。

3、在Struts2中导出数据到csv文件,并将生成的csv文件路径传递给下载Action进行下载。一个简单的例子。

CsvAction,生成csv文件,并且将生成的csv文件完整路径传递到下载Action。
package cn.luxh.struts2.action;

import java.io.FileWriter;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import cn.luxh.struts2.entity.Novel;

import com.opensymphony.xwork2.ActionSupport;


/**
* 导出数据到csv文件
* @author Luxh
*/
public class CsvAction extends ActionSupport {

private static final long serialVersionUID = -2862629695443964658L;

/**
* 包含完整路径的文件名
* 传递给下载Action进行下载
*/
private String fileName;


/**
* 导出数据
*/
public String exportData2CSV() {
List novels = getNovels();
fileName = "D:/novels.csv";
writeData2CSV(novels,fileName);
retur

n SUCCESS;

}

/**
* 构造一些数据
* 实际上可能是从数据库中把大量的数据查出来
*/
private List getNovels() {
List novels = new ArrayList();

Novel novel1 = new Novel("风云第一刀","古龙",new Date());
Novel novel2 = new Novel("书剑恩仇录","金庸",new Date());
Novel novel3 = new Novel("陆小凤传奇","古龙",new Date());
Novel novel4 = new Novel("鹿鼎记","金庸",new Date());

novels.add(novel1);
novels.add(novel2);
novels.add(novel3);
novels.add(novel4);

return novels;
}

/**
* 把数据按一定的格式写到csv文件中
* @param novels 数据集合
* @param fileName csv文件完整路径
*/
public void writeData2CSV(List novels,String fileName) {
FileWriter fw = null;
try {
fw = new FileWriter(fileName);
//输出标题头
//注意列之间用","间隔,写完一行需要回车换行"\r\n"
String title = "序号,小说名称,作者,出版日期\r\n";
fw.write(title);

String content = null;
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
for(int i=0;iNovel novel = novels.get(i);
//注意列之间用","间隔,写完一行需要回车换行"\r\n"
content =(i+1)+","+novel.getName()+","+novel.getAuthor()+","+sdf.format(novel.getPublishDate())+"\r\n";
fw.write(content);
}
}catch(Exception e) {
e.printStackTrace();
throw new RuntimeException(e);
}finally {
try {
if(fw!=null) {
fw.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}

}





download
/download

${fileName}


相关文档
最新文档