Java导出到excel的工具类

在我们用ajax做文件导出时,我们发现ajax获是取不到返回的文件的,ajax只能接受文本内容,所以我们不能直接用ajax直接接受导出回来的excel文件,因此我提供了一个折中的导出办法,先由Java将文件导出到应用所在服务器上,然后在从服务器下载到用户本机,并附带java代码的工具类。

1、首先定义工具类参数
// excel文件名称
String headName = "testExcel文件";
String fileName = headName + fmt.format(new Date()) + ".xls";
//要导出的成excel的list集合
List<List> list = {};
//集合中对应字段
String[][] keys = { { 'id','name' }};
//excel每一列的标题名称
String[][] headerss = { { 'id', '名称' }}
//文件在服务器放置路径,此为当前项目的war包所在地址
String realpath = request.getSession().getServletContext().getRealPath("/");
2、调用工具类并返回下载路径
String excelFile = ExportExcelUtil.exportExcel(realpath, headName, fileName,
response, list, headerss, keys);
------工具类文件中下载
3、用ajax方式从服务器下载excel文件到本机
ajax传入后台所需路径与名称
String fileUrl 服务器放置文件路径
String fileName 文件名称
创建输入输出流
BufferedInputStream bis = null;
BufferedOutputStream bos = null;
OutputStream fos = null;
InputStream fis = null;
try {
fis = new FileInputStream(fileUrl);
bis = new BufferedInputStream(fis);
fos = response.getOutputStream();
bos = new BufferedOutputStream(fos);
setFileDownloadHeader(request, response, fileName);
int byteRead = 0;
byte[] buffer = new byte[8192];
while ((byteRead = bis.read(buffer, 0, 8192)) != -1) {
    bos.write(buffer, 0, byteRead);
}
bos.flush();
fis.close();
bis.close();
fos.close();
bos.close();
} catch (Exception e) {
}
调用方法 setFileDownloadHeader 传入文件名称
public static void setFileDownloadHeader(HttpServletRequest request,
HttpServletResponse response, String fileName) {
try {
// 中文文件名支持
String encodedfileName = null;
String agent = request.getHeader("USER-AGENT");

if (null != agent && -1 != agent.indexOf("MSIE")) {// IE
encodedfileName = URLEncoder.encode(fileName, "UTF-8");
} else if (null != agent && -1 != agent.indexOf("Mozilla")) {
encodedfileName = new String(fileName.getBytes("UTF-8"),
"iso-8859-1");
} else {
encodedfileName = URLEncoder.encode(fileName, "UTF-8");
}
// response.setHeader("Content-Disposition", "attachment; filename=\""
// + encodedfileName + "\"");
response.setHeader("Content-disposition", "attachment;filename="
+ new String(fileName.getBytes("GBK"), "ISO8859-1"));
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
}

猜你喜欢

转载自liushuoa.iteye.com/blog/2376548