Java生成TXT文本并下载

嘉乐集团总公司 1年前 ⋅ 1654 阅读

要求:上传txt的文本内容与生成txt的文本内容保存一致

js实现(生成内容较为简单的TXT文本,不注重格式,自动换行)

// 生成有内容的TXT文件
function createTxt(filename, text) {
    var pom = document.createElement('a');
    pom.setAttribute('href', 'data:text/plain;charset=utf-8,' + encodeURIComponent(text));
    pom.setAttribute('download', filename);
    if (document.createEvent) {
        var event = document.createEvent('MouseEvents');
        event.initEvent('click', true, true);
        pom.dispatchEvent(event);
    } else {
        pom.click();
    }
}
java后台实现:数据库字段选用的是longtext类型,它会保存你原有的的文本格式,包括换行、tab...生成txt文本时不会改文本格式。

生成文件流返回给前端页面,如果你用的是ROSE框架,用Invocation inv响应就可以了,如果不是,那就用HttpServletResponse response响应。

案例一:

X8QVT$K(XPH`@[]SFYR(_VC.png

/* 导出txt文件
 * @author	lenian
 * @param	response
 * @param	text 导出的字符串
 * @return
 */
@Get("exportTxt")
@Post("exportTxt")
public void exportTxt(Invocation inv, @Param("id") @DefValue("1") Integer id){

    Courseinfo info = dao.find(id);
    String text = info.getAccessories();

    String filename = info.getKkxq()+ info.getKcmc() +"课程标准";

    inv.getResponse().setCharacterEncoding("utf-8");
    //设置响应的内容类型
    inv.getResponse().setContentType("text/plain");
    //设置文件的名称和格式
    inv.getResponse().addHeader("Content-Disposition","attachment;filename=" + genAttachmentFileName( filename, "JSON_FOR_UCC_") + ".txt");
    BufferedOutputStream buff = null;
    ServletOutputStream outStr = null;
    try {
        outStr = inv.getResponse().getOutputStream();
        buff = new BufferedOutputStream(outStr);
        buff.write(text.getBytes("UTF-8"));
        buff.flush();
        buff.close();
    } catch (Exception e) {
        //LOGGER.error("导出文件文件出错:{}",e);
    } finally {
        try {
            buff.close();
            outStr.close();
        }
        catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}

// 设置名称格式,没有这个中文名称无法显示
public  String genAttachmentFileName(String cnName, String defaultName) {
    try {
        cnName = new String(cnName.getBytes("gb2312"), "ISO8859-1");
    } catch (Exception e) {
        cnName = defaultName;
    }
    return cnName;
}

案例二:

)~Z}L1V(8(S(3ALO%J5)N4C.png

/* 导出txt文件
 * @author	lenian
 * @param	response
 * @param	text 导出的字符串
 * @return
 */
@Get("exportTxt")
@Post("exportTxt")
public void exportTxt(Invocation inv, @Param("id") @DefValue("1") Integer id){
    Courseinfo info = dao.find(id);
    String text = info.getAccessories();
    String filename = info.getKkxq()+ info.getKcmc() +"xx标准";
    inv.getResponse().setCharacterEncoding("utf-8");
    //设置响应的内容类型
    inv.getResponse().setContentType("text/plain");
    //设置文件的名称和格式
    inv.getResponse().addHeader("Content-Disposition","attachment;filename=" + genAttachmentFileName( filename, "JSON_FOR_UCC_") + ".txt");
    ServletOutputStream outStr = null;
    try {
        outStr = inv.getResponse().getOutputStream();
        StringReader reader = new StringReader(text);
        OutputStreamWriter writer = new OutputStreamWriter(outStr,"utf-8");
        BufferedWriter bufferedWriter = new BufferedWriter(writer);
        BufferedReader bufferedReader = new BufferedReader(reader);
        String brString= bufferedReader.readLine();
        while(brString != null){
            bufferedWriter.write(brString);
            bufferedWriter.newLine();
            brString= bufferedReader.readLine();
        }
        bufferedWriter.flush();
        bufferedWriter.close();
        writer.close();
    } catch (Exception e) {
        //LOGGER.error("导出文件文件出错:{}",e);
    }
}

经测试,案例二对两种空格都支持。


全部评论: 0

    我有话说:

    十堰嘉乐软件基地

    微信 扫一扫

    客户服务热线

    0719-400-10010

    在线客服
    支付宝打赏 微信打赏