将给定数据源生成静态HTML页面持久化到项目之外的硬盘

时间:2019-09-28
本文章向大家介绍将给定数据源生成静态HTML页面持久化到项目之外的硬盘,主要包括将给定数据源生成静态HTML页面持久化到项目之外的硬盘使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

一、java代码

设置好数据源map

Map<String,String> map=new HashMap<>();
        map.put("knowledgeName",tBasKnowledgebase.getKnowledgeName());
        map.put("htmlContent",tBasKnowledgebase.getHtmlContent());
        map.put("publishDate",new java.text.SimpleDateFormat("yyyy-MM-dd").format(tBasKnowledgebase.getPublishDate()));
        CreateHtmlUtils.MakeHtml(rpath,map,htmlPath,tBasKnowledgebase.getKnowledgeId());

工具类方法

/**
     * @Title: MakeHtml
     * @Description: 创建html
     * @param    filePath 设定模板文件
     * @param    map 需要显示图片的路径
     * @param    disrPath  生成html的存放路径
     * @param    fileName  生成html名字
     * @return void    返回类型
     * @throws
     */
    public static void MakeHtml(String filePath, Map<String,String> map, String disrPath, String fileName ){
        try {
            System.out.print(filePath);
            String templateContent = "";
            // 读取模板文件,模板文件,是工程中的一个html页面,里面有一些需要替换的字段
            FileInputStream fileinputstream = new FileInputStream(filePath);
            int lenght = fileinputstream.available();
            byte bytes[] = new byte[lenght];
            fileinputstream.read(bytes);
            fileinputstream.close();
            templateContent = new String(bytes, "utf-8");
            System.out.print(templateContent);
            // 替换掉模板中的一些字段,填充数据渲染页面
            for (Map.Entry<String,String> entry : map.entrySet()) {
                String key=entry.getKey();
                String value=entry.getValue();
                templateContent = templateContent.replaceAll("###"+key+"###", value);
                System.out.println("Key = " + entry.getKey() + ", Value = " + entry.getValue());
            }
            System.out.print(templateContent);
            String fileame = fileName + ".html";
            // 生成的html文件保存路径,html文件全路径,选择服务器上工程目录下以外的路径,持久化存储到硬盘,这样发布新版本原来的静态文件不会丢失
            fileame = disrPath+"/" + fileame;
            // 根据文件全路径创建file对象
            File file=new File(fileame);
            if(!file.getParentFile().exists()){
                file.getParentFile().mkdirs();
            }
            if(!file.exists()){
                file.createNewFile();
            }
            FileOutputStream fileOutputStream=new FileOutputStream(file);
            OutputStreamWriter oStreamWriter = new OutputStreamWriter(fileOutputStream, "utf-8");
            // 将替换完数据的模板页面形成的文件流持久化到硬盘
            oStreamWriter.append(templateContent);
            oStreamWriter.close();
        } catch (Exception e) {
            System.out.print(e.toString());
        }
    }

工程中的模板HTML文件:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8" />
    <title>###knowledgeName###</title>
    <style>
        body{ text-align:center;border: 0;margin: 0;}
        .div{ margin:20px auto;max-width: 1000px}
        .title{
            font-size: 20px;
            font-weight: bold;
            margin-bottom: 20px;
        }
        .date{
            border-bottom: 1px solid #9a9a9a;
            padding: 0 16px 16px;
            font-size: 15px;
        }
        .content{
            text-align: left;
            padding-top: 10px;
            line-height: 30px;
        }
        .toolsBox {
            height: 36px;
            border: 1px solid #d8d8d8;
            background: #fafbfb;
            font-size: 14px;
            color: #666;
            line-height: 36px;
            text-align: center;
            margin-top: 70px;
        }
        .toolsBox a, .toolsBox i {
            color: #666;
            cursor: pointer;
            font-style: normal;
            text-decoration: none;
        }
        .toolsBox i.on {
            color: #ff8400;
        }
    </style>
</head>
<body>
<div class="div">
    <div class="title">
        ###knowledgeName###
    </div>
    <div class="date">
        ###publishDate###
    </div>
    <div class="content">
        ###htmlContent###
    </div>
    <div class="toolsBox">字体:【 <i>大</i>  <i @cile class="on">中</i>  <i>小</i> 】<a href="javascript:window.print();">【打印 】</a><a href="javascript:window.close();">【关闭】</a></div>
</div>
<script src="/js/jquery-1.8.3.min.js"></script>
<script type="text/javascript">
    (function () {

        // 字号设置
        function setFontSize(oElement,size){
            var size = size || 14;
            $(oElement).css({'fontSize': size+"px"});
        }
        $('.toolsBox i').eq(0).click(function() {
            setFontSize('.content p','16');
            $(this).siblings('i').removeClass('on');
            $(this).addClass('on');
        });
        $('.toolsBox i').eq(1).click(function() {
            setFontSize('.content p','14');
            $(this).siblings('i').removeClass('on');
            $(this).addClass('on');
        });
        $('.toolsBox i').eq(2).click(function() {
            setFontSize('.content p','12');
            $(this).siblings('i').removeClass('on');
            $(this).addClass('on');
        });

    })();

</script>
</body>
</html>

效果:

原文地址:https://www.cnblogs.com/wmqiang/p/11603143.html