java 生成word文件并下载 下载本文

内容发布更新时间 : 2024/11/16 23:32:19星期一 下面是文章的全部内容请认真阅读。

importjava.io.BufferedInputStream; importjava.io.BufferedOutputStream; importjava.io.BufferedWriter; importjava.io.File;

importjava.io.FileInputStream; importjava.io.FileOutputStream; importjava.io.IOException; importjava.io.InputStream; importjava.io.OutputStream;

importjava.io.OutputStreamWriter; importjava.io.Writer;

importjava.net.URLEncoder; importjava.util.Map;

importjavax.servlet.http.HttpServletResponse; import org.apache.log4j.Logger;

importfreemarker.template.Configuration; importfreemarker.template.Template; /**

* @Desc:word操作工具类 */

public class WordUtil { private static Logger log = Logger.getLogger(WordUtil.class); /**

* @Desc:生成word文件 * @paramdataMap word中需要展示的动态数据,用map集合来保存 * @paramtemplateName word模板名称,例如:test.ftl * @paramfilePath文件生成的目标路径,例如:D:/wordFile/ * @paramfileName生成的文件名称,例如:test.doc */ public static void createWord(MapdataMap,StringtemplateName,StringfilePath,StringfileName){ try {

//创建配置实例

Configuration configuration = new Configuration();

//设置编码

configuration.setDefaultEncoding(\

//ftl模板文件

File file = new File(filePath); configuration.setDirectoryForTemplateLoading(file);

//获取模板

Template template = configuration.getTemplate(templateName);

//输出文件

File outFile = new File(filePath + File.separator + fileName);

//如果输出目标文件夹不存在,则创建 if (!outFile.getParentFile().exists()){ outFile.getParentFile().mkdirs(); }

//将模板和数据模型合并生成文件 Writer out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outFile),\

//生成文件

template.process(dataMap, out);

//关闭流 out.flush(); out.close();

} catch (Exception e) {

log.error(\生成 word文档(WordUtil)出错:【msg:\】 ,文件名:\+ fileName);

e.printStackTrace(); } } /** * 文件下载 * @param path 文件路径全路径,包含文件名 * @param response * @return */ public static HttpServletResponsedownFile(String path, HttpServletResponse response) { try { // path是指欲下载的文件的路径。 File file = new File(path); // 取得文件名。 String filename = file.getName(); // 以流的形式下载文件。 InputStreamfis = new BufferedInputStream(new FileInputStream(file)); byte[] buffer = new byte[fis.available()];

}

fis.read(buffer); fis.close();

// 清空response response.reset();

// 设置response的Header

String fileName = URLEncoder.encode(filename,\if(fileName.length()>150){ //解决IE 6.0 bug fileName=new String(filename.getBytes(\ }

response.addHeader(\response.addHeader(\

OutputStreamtoClient = new BufferedOutputStream(response.getOutputStream()); response.setContentType(\toClient.write(buffer); toClient.flush(); toClient.close();

file.delete();

} catch (IOException e) { log.error(\下载文档(WordUtil)出错:【msg:\】 \e.printStackTrace(); }

return response; }