此工具类是利用freemarker模板引擎 xml文件/ftl文件 成的word或excel文件
Java
package com.izhizuo.cloud.util;
import freemarker.template.Configuration;
import freemarker.template.Template;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.util.Map;
/**
*
* @author ihizuo
* @date 2017/11/29
* 文件导出相关的工具类
*/
public class FileExportUtil {
/**
* 导出word文件
* @param templatePath
* @param dataMap
* @return
* @throws IOException
*/
public static File createFile(String templatePath, Map dataMap) throws IOException {
Configuration configuration = new Configuration();
configuration.setDefaultEncoding("utf-8");
//String a = ClassUtils.getDefaultClassLoader().getResource("").getPath().replace("file:", "");
// 模板文件全路径名切割
int lastIndexOf = templatePath.lastIndexOf("/");
//模板文件路径名
String path = templatePath.substring(0, lastIndexOf);
//模板文件名
String name = templatePath.substring(lastIndexOf + 1);
configuration.setClassForTemplateLoading(FileExportUtil.class, path);
File file = new File(name);
try {
//configuration.setDirectoryForTemplateLoading(filePath);
Template template = configuration.getTemplate(name);
// 这个地方不能使用FileWriter因为需要指定编码类型否则生成的Word文档会因为有无法识别的编码而无法打开
Writer w = new OutputStreamWriter(new FileOutputStream(file), "utf-8");
template.process(dataMap, w);
w.close();
} catch (Exception e) {
e.printStackTrace();
throw new IOException("创建文档出错");
}
return file;
}
/**
* 客户端下载word文件
* @param response
* @param file
* @param fileName
* @param fileType 文件类型
* @throws IOException
*/
public static void downWord( HttpServletResponse response, File file, String fileName, String fileType) throws IOException {
// 设置浏览器以下载的方式处理该文件的文件名,支持中文
setFileDownloadHeader(response, fileName, "." + fileType);
InputStream fin = null;
ServletOutputStream out = null;
try {
// 调用工具类WordGenerator的createDoc方法生成Word文档
fin = new FileInputStream(file);
out = response.getOutputStream();
byte[] buffer = new byte[1024];
int bytesToRead = -1;
// 通过循环将读入的Word文件的内容输出到浏览器中
while((bytesToRead = fin.read(buffer)) != -1) {
out.write(buffer, 0, bytesToRead);
}
} catch (Exception e) {
e.printStackTrace();
throw new IOException("下载文件出错");
} finally {
if(fin != null) {
fin.close();
}
if(out != null) {
out.close();
}
if(file != null) {
// 删除临时文件
file.delete();
}
}
}
/**
* 设置让浏览器弹出下载对话框的Header
* @param response
* @param fileName
* @param fileType
*/
public static void setFileDownloadHeader(HttpServletResponse response, String fileName, String fileType){
try {
// 中文文件名支持
String encodedfileName = new String(fileName.getBytes("GBK"), "ISO8859-1");
response.setHeader("Content-Disposition", "attachment; filename=\"" + encodedfileName + fileType + "\"");
response.setCharacterEncoding("utf-8");
if (".doc".equals(fileType)){
response.setContentType("application/msword");
}else {
response.setContentType("application/msexcel");
}
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
}
}
标签: java 工具类 导入导出 Excel freemarker Word
文章来源:
不凡
版权声明:本站所发布的全部内容部分源于互联网搬运,仅供用于学习和交流,如果有侵权之处请第一时间联系我们删除。敬请谅解! E-mail:bufanYes@163.com
还木有评论哦,快来抢沙发吧~