前台jsp调用代码:
function outexe(){
queryForm.action = "<%=basepath%>/lpm/lpm-grpinfoExl.action";
queryForm.submit();
}
action代码:
/*
* 将数据导出到excel
*/
@Action(value="lpm-grpinfoExl")
public String lpmExl()throws Exception
{
LpmServiceInter ll = ServiceFactory.getLpmService();
List result=ll.query(lpmdto.getHql());
//写第一行标题行
String fileFolder = com.utils.FileUtil.createExlFile(getHttpRequest());//建文件夹
File objFile = new File(fileFolder + File.separator + "公司信息.csv");//建文件
String title = "公司编号,公司名称,公司状态,联系电话,注册时间";
com.utils.FileUtil.appendDataWriter(objFile, title + "\n");
//插入数据
StringBuffer data = new StringBuffer();
int rows = 0;
for(java.util.Iterator i=result.iterator();i.hasNext();){
GrpInfo g=(GrpInfo) i.next();
String s=null;
String s2=null;
data.append(" " + g.getGrpCode()).append(",");
data.append(" " + g.getGrpName()).append(",");
if(g.getStatus()==1){
s="有效";
}else{
s="已经撤销";
}
data.append(" " + s).append(",");
data.append(" " + g.getGrpTelNo()).append(",");
if(g.getRegtime()!=null){
s2=DateUtil.datetoStr2(g.getRegtime());
}else{
s2="";
}
data.append(" " +s2);
data.append("\n");
rows ++;
//当StringBuffer超过1千行数据时就先往文件插入那1千行数据并清空缓存数据
if(rows > 1000){
com.utils.FileUtil.appendDataWriter(objFile, data.toString());
data.delete(0, data.length());
}
}
com.utils.FileUtil.appendDataWriter(objFile, data.toString());
//输出到excel
com.utils.FileUtil.outExl(objFile, getHttpResponse());
return null;
}
自定义util工具类代码:
public static String createExlFile(HttpServletRequest request){
String parentPath = request.getSession().getServletContext().getRealPath("/exceltemplate/temp/" + (new java.text.SimpleDateFormat("yyyyMMdd")).format(new Date()));
//存tjfx目录
String fileFolder = parentPath + File.separator + "tjfx";
new File(fileFolder).mkdirs();
//删除tjfx里的临时文件
delete(new File(fileFolder));
return fileFolder;
}
//追加数据
public static void appendDataWriter(File objFile, String data) {
//if(!objFile.exists())
FileWriter objFileWriter = null;
BufferedWriter bfWriter = null;
try {
objFileWriter = new FileWriter(objFile, true);//true表示以追加的方式进行追加数据到文件
bfWriter = new BufferedWriter(objFileWriter);//将文本写入字符输出流,缓冲各个字符,从而提供单个字符、数组和字符串的高效写入
bfWriter.write(data);//写数据行
//bfWriter.newLine();//写入一个行分隔符。
} catch (Exception e) {
//System.out.println("追加流发生错误:" + e.toString());
e.printStackTrace();
} finally {
try {
bfWriter.flush();
bfWriter.close();
objFileWriter.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
public static void outExl(File objFile, HttpServletResponse response)
throws Exception {
ServletOutputStream os = null;
InputStream in = null;
try {
long l = objFile.length(); //文件长度
in = new FileInputStream(objFile);
os = response.getOutputStream();//获取输出流
if (in != null) {
response.reset();
response.setCharacterEncoding("gbk");
response.setContentType("application/x-msdownload"); //
String title = objFile.getName();
title = title.substring(0,title.lastIndexOf("."));
String sf = "attachment; filename="
+ new String(title.getBytes(), "iso-8859-1") + ".csv"; //
response.setHeader("Content-Disposition", sf); // 以上输出文件元信息
response.setContentLength((int) l); //设置输入文件长度
byte[] b = new byte[2048];
int len = 0;
while ((len = in.read(b)) > 0) {
os.write(b, 0, len); //向浏览器输出
}
}
os.flush();
} catch (Exception e) {
e.printStackTrace();
} finally {
if(in != null)
in.close(); //关闭文件输入流
if(os != null)
os.close();
}
}