package htmlskin;

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.Writer;
import java.util.Calendar;
import java.util.HashMap;
import java.util.Map;
import java.util.Random; import freemarker.template.Configuration;
import freemarker.template.Template;
import freemarker.template.TemplateException; public class FreeMarkerTest { private Configuration cfg;// FreeMarker配置实例 public static void main(String[] args) {
FreeMarkerTest test = new FreeMarkerTest(); Map<String, Object> root = new HashMap<String, Object>();
root.put("message", "Hello FreeMarker.");
String ftl = "/ftl/test.ftl";
boolean flag = test.genericHtmlFile(ftl, root);
if(flag){
System.out.println("创建静态HTML页面成功!");
}else{
System.out.println("创建静态HTML页面失败!");
}
} /**
* 获取FreeMarker配置实例
* @return
*/
public Configuration getConfiguration() {
if (null == cfg) {
cfg = new Configuration();
//通过classpath载入方式
cfg.setClassForTemplateLoading(this.getClass(), "/htmlskin");
}
return cfg;
} /**
* 生成HTML页面
* @param ftl FreeMarker模版文件
* @param root 模版数据
* @return true->生成静态页面成功 false->生成静态页面失败
*/
public boolean genericHtmlFile(String ftl, Map<String, Object> root) {
try {
Template template = getConfiguration().getTemplate(ftl);
String projectPath = System.getProperty("user.dir");
String htmlPath = projectPath + File.separator + "html";
String path = createDirs(htmlPath, genericFilePath());
String name = genericFileName();
// System.out.println(path+name); File file = new File(path + name);
Writer out = new BufferedWriter(new OutputStreamWriter(
new FileOutputStream(file)));
template.process(root, out);
} catch (FileNotFoundException e) {
return false;
} catch (IOException e) {
return false;
} catch (TemplateException e) {
return false;
}
return true;
} /**
* 生成存储文件子路径
* 格式:\yyyy\MM\dd\
* @return 文件子路径
*/
public String genericFilePath() {
Calendar calendar = Calendar.getInstance();
int year = calendar.get(Calendar.YEAR);// 年
int month = calendar.get(Calendar.MONTH);// 月
int day = calendar.get(Calendar.DAY_OF_MONTH);// 日 String year_str = "";
String month_str = "";
String day_str = ""; year_str = String.valueOf(year);
month_str = month < 10 ? "0" + month : month + "";
day_str = day < 10 ? "0" + day : day + ""; // 拼接子路径
StringBuffer sb = new StringBuffer();
sb.append(File.separator);
sb.append(year_str);
sb.append(File.separator);
sb.append(month_str);
sb.append(File.separator);
sb.append(day_str);
sb.append(File.separator);
return sb.toString();
} /**
* 生成文件名
* 格式:yyyyMMddHHmmss4位随机数
* @return 文件名
*/
public String genericFileName() {
//创建日历类
Calendar calendar = Calendar.getInstance();
int year = calendar.get(Calendar.YEAR);//年
int month = calendar.get(Calendar.MONTH);//月
int day = calendar.get(Calendar.DAY_OF_MONTH);//日
int hour = calendar.get(Calendar.HOUR_OF_DAY);//时
int minus = calendar.get(Calendar.MINUTE);//分
int second = calendar.get(Calendar.SECOND);//秒
//创建生成随机数类
Random random = new Random(); String year_str = year + "";
String month_str = month < 10 ? "0" + month : month + "";
String day_str = day < 10 ? "0" + day : day + "";
String hour_str = hour < 10 ? "0" + hour : hour + "";
String minus_str = minus < 10 ? "0" + minus : minus + "";
String second_str = second < 10 ? "0" + second : second + "";
// System.out.println("year=" + year + ",month=" + month + ",day=" + day
// + ",hour=" + hour + ",minus=" + minus + ",second=" + second); StringBuffer sb = new StringBuffer();
sb.append(year_str);
sb.append(month_str);
sb.append(day_str);
sb.append(hour_str);
sb.append(minus_str);
sb.append(second_str);
sb.append(random.nextInt(8999) + 1000); return sb.toString() + ".html";
} /**
* 创建文件夹
* @param parentDir 父文件夹
* @param subDir 子文件夹
* @return 存储文件全文件夹
*/
public String createDirs(String parentDir, String subDir) {
//System.out.println("父文件夹:" + parentDir);
//System.out.println("子文件夹:" + parentDir + subDir);
String path = parentDir + subDir; File parentFile = new File(parentDir);
if (parentFile.exists()) {
File subFile = new File(path);
if (!subFile.exists()) {
subFile.mkdirs();
}
}
return path;
}
}

版权声明:本文博主原创文章。博客,未经同意不得转载。

经FreeMarkerclasspath加载方式生成静态页面的更多相关文章

  1. C#加载前生成静态网页

    using System;using System.Collections.Generic;using System.Linq;using System.Web;using System.Web.UI ...

  2. Linux共享库两种加载方式简述

      Linux共享库两种加载方式简述  动态库技术通常能减少程序的大小,节省空间,提高效率,具有很高的灵活性,对于升级软件版本也更加容易.与静态库不同,动态库里面的函数不是执行程序本身 的一部分,而是 ...

  3. Fragment加载方式与数据通信

    一.加载方式 1. 静态加载 1.1 加载步骤 (1) 创建fragment:创建自定义Fragment类继承自Fragment类,同时将自定义Fragment类与Fragment视图绑定(将layo ...

  4. PHP代码为什么不能直接保存HTML文件——&gt;PHP生成静态页面教程

    1.server会依据文件的后缀名去进行解析,假设是HTML文件则server不会进行语法解析.而是直接输出到浏览器. 2.假设一个页面中所有都是HTML代码而没有须要解析的PHP语法,则没有必要保存 ...

  5. 浅谈php生成静态页面

    一.引 言 在速度上,静态页面要比动态页面的比方php快很多,这是毫无疑问的,但是由于静态页面的灵活性较差,如果不借助数据库或其他的设备保存相关信息的话,整体的管理上比较繁琐,比方修改编辑.比方阅读权 ...

  6. .net 生成 静态页面

    .net 生成 静态页面 <!--Main.Aspx--> <%@ page language="C#" %> <%@ import namespac ...

  7. [转]把动态页面.aspx 生成静态页面.html

    本文转自:http://blog.csdn.net/csb5201314/article/details/5391688 如果要把主页Index.aspx 生成静态页面 Index.html后输出会提 ...

  8. 链接库lib和dl的概念,加载方式的区别

    使用LR进行基于windows socket协议做接口测试,只提供了lr_load_dll方法来动态加载动态链接库.之前学习阶段,对TinyXML的学习,使用的静态链接库,当时在程序调用的时候方法也跟 ...

  9. Javascript动态加载Html元素到页面Dom文档结构时执行顺序的不同

    我们有时会通过ajax动态获取一段Html代码,并且将这段代码通过javascript放到页面的Dom结构中去. 而很多时候通过ajax动态获取的Html代码中也包含javascript代码,有一点需 ...

随机推荐

  1. java读取XML文件的四种方式

    java读取XML文件的四种方式 Xml代码 <?xml version="1.0" encoding="GB2312"?> <RESULT& ...

  2. 风起看云涌,叶落品人生 - Google 搜索

    风起看云涌,叶落品人生 - Google 搜索 风起看云涌,叶落品人生

  3. 强势围观,CSDN代码引用bug

    看我写的一篇blog  http://blog.csdn.net/laijieyao/article/details/41014355,在代码上引用了微软雅黑的字体,结果代码显示出来把我给惊呆了 竟然 ...

  4. .Net 内存溢出(System.OutOfMemoryException)

    .Net 内存溢出(System.OutOfMemoryException) 在什么情况下会出现OutOfMemonryException呢? 在我们试图新建一个对象时,而垃圾收集器又找不到任何可用内 ...

  5. poj3126解题报告

    题意:简单的说就是:有一个人门牌号是一个四位数的整数,并且还是一个素数,现在他想要换成另外一个四位数且是素数的门牌号,而且,每次都只能更换这个四位数的一个位置的数 ,也就是每换一次都只改变一个数字,而 ...

  6. vim ctl+v批量添加/删除

    vim编辑器---批量注释与反注释 在使用vim编写代码的时候,经常需要用到批量注释与反注释一段代码.下面简要介绍其操作. 方法一 块选择模式 插入注释: 用v进入virtual模式 用上下键选中需要 ...

  7. POJ 3100 &amp; ZOJ 2818 &amp; HDU 2740 Root of the Problem(数学)

    题目链接: POJ:id=3100" style="font-size:18px">http://poj.org/problem? id=3100 ZOJ:http ...

  8. Three.js 3D打印数据模型文件(.STL)载入中

    3DPrint是现在和未来10年度科技产品的主流之中.广泛的. 对于电子商务类3D打印网站.一个主要功能就是商品3D呈现的方式,那是,3D数据可视化技术. HTML5(WebGL)它可以用于构建3D查 ...

  9. Windows Phone 如果你把Pivot控件当成主页面,那么这篇文章你值得看。

    原文:Windows Phone 如果你把Pivot控件当成主页面,那么这篇文章你值得看. 现在很多App都用到了Pivot视图 来当作 整个App主页面.如果你的Pivot视图主页面承载了大量数据的 ...

  10. Linux使用快捷键,who命令,rm命令,ps命令,cd,命令kill命令,find命令,grep命令,tar命令(gz、tar、bz2),用户管理,vim配置的一部分,相关命令

    1.进入Ubuntu开场后的终端窗口的快捷键是:           ctrl + alt+t:通过这个命令能够打开终端. ctrl + alt+t:通过这个命令能够打开终端. 再开一个tab选项卡式 ...