`

导出Csv文件

阅读更多

 

 导出Csv文件思路:1.首先把数据遍历,在服务器端生成Csv文件

                                2.将服务器端生成的Csv文件提供给客户端下载

注意:如果导出数据中有科学计数法表示:请在导出数据后加上“\t”。

package com.neusoft.util.excel;

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.URLEncoder;
import java.util.Date;
import java.util.Iterator;
import java.util.List;

import javax.servlet.http.HttpServletResponse;

import org.apache.log4j.Logger;

import com.neusoft.common.exception.BaseException;
import com.neusoft.dataCenter.residentManage.model.ResidentBean;

public class ExportCsv
{

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

 /**
  *
  * 作用:获得Csv文件
  *
  * @param residentList
  *            需要遍历的结合
  * @param dirpath
  *            临时文件路径
  * @param Prefix
  *            临时文件前缀
  * @return
  * @throws BaseException
  */
 public File getCsvFile(List<ResidentBean> residentList, String dirpath, String Prefix) throws BaseException
 {
  BufferedWriter out = null;
  FileOutputStream writerStream = null;
  int random = (int) (Math.random() * 1000 + 1);
  File excelFile = null;
  File dir = new File(dirpath);
  if (!dir.exists())
  {
   dir.mkdirs();
  }
  try
  {
   File[] filelist = dir.listFiles();
   Date date = new Date();
   for (int i = 0; i < filelist.length; i++)
   {
    long modifytime = filelist[i].lastModified();
    long nowdate = date.getTime();

    if ((nowdate - modifytime) / 1000 >= 3600)
    {
     filelist[i].delete();
    }

   }
  } catch (Exception e)
  {
   logger.info("删除导出居民信息产生的临时文件异常", e);
  }
  try
  {
   excelFile = File.createTempFile(Prefix + random, ".csv", dir);
   int i = 1;

   writerStream = new FileOutputStream(excelFile);
   out = new BufferedWriter(new OutputStreamWriter(writerStream, "gb2312"));
   out.write("序号,姓名,手机号码,街道名称,社区名称,小区名称,年龄,性别,民族,出生日期,身份证号码,政治面貌,文化程度,地址");// 换成你需要的表头
   out.newLine();
   Iterator<ResidentBean> resultIterator = residentList.iterator();
   while (resultIterator.hasNext())
   {
    ResidentBean e = resultIterator.next();
    StringBuffer tempBuffer = new StringBuffer();
    tempBuffer.append(i);
    tempBuffer.append(",");
    tempBuffer.append(e.getName() == null ? "" : e.getName().trim());
    tempBuffer.append(",");
    tempBuffer.append(e.getMobile() == null ? "" : e.getMobile().trim() + "\t");
    tempBuffer.append(",");
    tempBuffer.append(e.getStreetName() == null ? "" : e.getStreetName().trim());
    tempBuffer.append(",");
    tempBuffer.append(e.getCommunityName() == null ? "" : e.getCommunityName().trim().replace("\r\n", ""));
    tempBuffer.append(",");
    tempBuffer.append(e.getVillageName() == null ? "" : e.getVillageName().trim());
    tempBuffer.append(",");
    tempBuffer.append(e.getAge() == null ? "" : e.getAge().trim());
    tempBuffer.append(",");
    tempBuffer.append(e.getSex() == null ? "" : e.getSex().trim());
    tempBuffer.append(",");
    tempBuffer.append(e.getNation() == null ? "" : e.getNation().trim());
    tempBuffer.append(",");
    tempBuffer.append(e.getBirthday() == null ? "" : e.getBirthday().trim() + "\t");
    tempBuffer.append(",");
    tempBuffer.append(e.getCardNo() == null ? "" : e.getCardNo().trim() + "\t");
    tempBuffer.append(",");
    tempBuffer.append(e.getNationality() == null ? "" : e.getNationality().trim());
    tempBuffer.append(",");
    tempBuffer.append(e.getEdu() == null ? "" : e.getEdu().trim());
    tempBuffer.append(",");
    tempBuffer.append(e.getAddress() == null ? "" : e.getAddress().trim());
    out.write(tempBuffer.toString());
    out.newLine();
    tempBuffer = null;
    i++;
   }
   out.flush();
  } catch (IOException e)
  {
   logger.error("生成居民信息CSV临时文件异常", e);
  } finally
  {
   if (out != null)
   {
    try
    {
     out.close();
    } catch (IOException e)
    {
     e.printStackTrace();
    }
   }
   if (writerStream != null)
   {
    try
    {
     writerStream.close();
    } catch (IOException e)
    {
     e.printStackTrace();
    }
   }
  }
  return excelFile;
 }

 /**
  * 将服务器端生成的Excel文件提供给客户端下载
  *
  * @param response
  * @param tempFile
  */
 public void download(HttpServletResponse response, File tempFile)
 {
  String filenamedownload = tempFile.toString();
  String filenamedisplay = "居民信息.csv";

  OutputStream output = null;
  FileInputStream fis = null;
  try
  {
   filenamedisplay = URLEncoder.encode(filenamedisplay, "UTF-8");
   response.addHeader("Content-Disposition", "attachment;filename=" + filenamedisplay);
   output = response.getOutputStream();
   fis = new FileInputStream(filenamedownload);

   byte[] b = new byte[1024];
   int i = 0;
   while ((i = fis.read(b)) > 0)
   {
    output.write(b, 0, i);
   }
   output.flush();
  } catch (Exception e)
  {
   // logger.error("导出居民信息CSV文件异常", e);
  } finally
  {
   if (fis != null)
   {
    try
    {
     fis.close();
    } catch (IOException e)
    {
     e.printStackTrace();
    }
    fis = null;
   }
   if (output != null)
   {
    try
    {
     output.close();
    } catch (IOException e)
    {
     e.printStackTrace();
    }
    output = null;
   }

  }
 }

}

调用:

//residentList 需要导出的集合,一般是从数据库获得的数据

//exportDirPath 导出到服务器的Csv临时文件路径,一般是spring注入进来

//jumin 导出Csv临时文件前缀

ExportCsv xx = new ExportCsv();
File tempfile = xx.getCsvFile(residentList, exportDirPath, "jumin");
xx.download(response, tempfile);

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics