1:vm模板页面的代码片段
<div class="col-sm-1"> <button type="button" class="btn btn-warning btn-sm" id="exportText"><i class="glyphicon glyphicon-file"/>导出文本文件</button> </div>
2:JavaScript脚本文件的代码片段
/** * 导出文本文件 */ $("#exportText").on('click',function(){ window.open(contextPath+'/exportText.json', '_blank'); });
3:Java控制器的代码片段
/** * 导出文件文件 * 用于UCC配置,将有效的数转换成JSON字符串,然后导出文本文件 * * @return * @throws Exception */ @RequestMapping("/exportText.json") public void exportText(HttpServletResponse response){ //获取有效的数据 List list = "i am godtrue 我最帅";//伪代码
//将集合转换成字符串 String jsonString = JSON.toJSONString(list); ExportTextUtil.writeToTxt(response,jsonString,"开关控制-JSON_FOR_UCC"); }
4:导出文本文件的工具类——此例的核心代码,当然,这仅仅是一种方式,还有其他的各种的选择
import java.io.BufferedOutputStream; import java.text.MessageFormat; import java.util.Calendar; import javax.servlet.ServletOutputStream; import javax.servlet.http.HttpServletResponse; import com.jd.fce.ape.web.common.util.FileUtil; import org.apache.commons.lang.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** * 导出文件文件的工具类 */ public class ExportTextUtil { /** * 声明日志记录器 */ private static final Logger LOGGER = LoggerFactory.getLogger(ExportTextUtil.class); /** * 导出文本文件 * @param response * @param jsonString * @param fileName */ public static void writeToTxt(HttpServletResponse response,String jsonString,String fileName) {//设置响应的字符集 response.setCharacterEncoding("utf-8"); //设置响应内容的类型 response.setContentType("text/plain"); //设置文件的名称和格式 response.addHeader( "Content-Disposition", "attachment; filename=" + FileUtil.genAttachmentFileName(fileName+ "_", "JSON_FOR_UCC_") + MessageFormat.format("{0,date,yyyy-MM-dd HH:mm:ss}", new Object[]{Calendar.getInstance().getTime()}) + ".txt");//通过后缀可以下载不同的文件格式 BufferedOutputStream buff = null; ServletOutputStream outStr = null; try { outStr = response.getOutputStream(); buff = new BufferedOutputStream(outStr); buff.write(delNull(jsonString).getBytes("UTF-8")); buff.flush(); buff.close(); } catch (Exception e) { LOGGER.error("导出文件文件出错,e:{}",e); } finally {try { buff.close(); outStr.close(); } catch (Exception e) { LOGGER.error("关闭流对象出错 e:{}",e); } } } /** * 如果字符串对象为 null,则返回空字符串,否则返回去掉字符串前后空格的字符串 * @param str * @return */ public static String delNull(String str) { String returnStr=""; if (StringUtils.isNotBlank(str)) { returnStr=str.trim(); } return returnStr; } }
5:解决导出文件名乱码的工具类
public abstract class FileUtil { /** * 生成导出附件中文名。应对导出文件中文乱码 * <p> * response.addHeader("Content-Disposition", "attachment; filename=" + cnName); * * @param cnName * @param defaultName * @return */ public static String genAttachmentFileName(String cnName, String defaultName) { try { // fileName = URLEncoder.encode(fileName, "UTF-8"); cnName = new String(cnName.getBytes("gb2312"), "ISO8859-1"); /* if (fileName.length() > 150) { fileName = new String( fileName.getBytes("gb2312"), "ISO8859-1" ); } */ } catch (Exception e) { cnName = defaultName; } return cnName; } }
6:参看如下
http://qingfeng825.iteye.com/blog/461504
鉴于水平有限难保不会出现错漏之处,如果你觉得那里有错误,请点击一下“反对”按钮,并希望您提出宝贵的修改意见,您的宝贵意见将是我们进步的一大源泉!
如果您觉得阅读上文对您有所帮助,请轻点一下“推荐”按钮,您的“推荐”将是我最大的写作动力!