zoukankan      html  css  js  c++  java
  • 生成任意内容任意类型的文件

    任何类型都可以,内容也是,excel虽然也可以生成,但它会把所有内容都放到第一个,所以还是老实用一般方法吧。

     

    这个有点麻烦,我们一步步来(可以先拉到最后看一眼配置文件会比较好理解)

    第一个类:调用方法

    public void test(){
      //参数一是需要放进去的内容,具体肯定不会这么短(根据模板多个的情况下改用list)
      //参数二是读取配置文件的路径
      insertContent("111", "D:/dev/workspace/lzpt/resource/");
    }

     

    第二个类:基础方法类

    import java.sql.SQLException;
    import java.util.HashMap;
    import java.util.Map;
    
    import com.flatform.cfg.domain.BasicCfgMessage;
    
    public class CodeGenerator {
    
      public static String flag = "0";
      private String classPackage;
      private String codePath;
      private String sourcePath;
      private BasicCfgMessage message;
      //各种路径
      public void config(String classPackage, String codePath) {
        this.classPackage = classPackage;
        this.codePath = codePath;
        //这里影响生成的文件被放在哪里
        this.sourcePath = (codePath + "/content/");
      }
      //上面调用的就是这个方法
      public static void insertContent(String content, String path) throws SQLException {
        CodeGenerator dg = new CodeGenerator();
        //你的路径配置文件的路径(如果放在resource(根目录)下面的话,直接写名字)
        String propertFilePath = "template.config.properties";
        String classPackage = StringUtil.getPropertyFromFile(path, propertFilePath, "classPackage");
        String codePath = StringUtil.getPropertyFromFile(path, propertFilePath, "codePath");
        dg.config(classPackage, codePath);
        return dg.generator(content, path);
      }
    
      public void generator(String content, String path) {
        Map<String, Object> map = new HashMap<String, Object>();// 实例化一个map
        //根据配置文件的参数可能有多个,这里只有一个content,因为只配了content
        map.put("content", content);
        //取名字,随便取吧
        String name = UUIDUtils.create();
    
      try {
        //第一个参数是内容配置文件,可以配置多个,多个的话,这段代码复制粘贴几遍就行了
        //第四个参数(就是那个有.exe的,是文件类型,什么后缀出来的就是什么类型的文件。exe当然也可以生成,虽然根据内容可能无法运行(还是txt,doc这种观赏类的比较适用)……)
        VelocityInfoOp.generatorCode("template.vm", map, this.sourcePath, name + ".exe", path);
        //没什么意义,看一眼信息用的
        System.out.println("***************代码生成完成******************");
        System.out.println("代码路径:" + this.codePath);
        System.out.println("包:" + this.classPackage);
        System.out.println("********************************************");
      } catch (Exception e) {
        throw new RuntimeException();
      }
    
      }
    
      public String getClassPackage() {
        return this.classPackage;
      }
    
      public void setClassPackage(String classPackage) {
        this.classPackage = classPackage;
      }
      public String getPath() {
        return this.sourcePath;
      }
    
      public void setPath(String path) {
        this.sourcePath = path;
      }
    }

     

    下一个类:配路径用的

    public static synchronized String getPropertyFromFile(String path, String filename, String key) {
      // getProperty获取指定键指示的系统属性
      //获取路径配置文件时的路径,具体情况具体分析
      String paodingAnalysisPath = path + filename;
      // 定义一个输入流
      InputStream in1 = null;
      // 定义一个类,资源包包含特定于语言环境的对象(需要特定语言环境的的资源时,加载资源包内的信息)
      ResourceBundle rb = null;
      try {
        in1 = new BufferedInputStream(new FileInputStream(paodingAnalysisPath));
    
        rb = new PropertyResourceBundle(in1);
      } catch (Exception e) {
        e.printStackTrace();
      }
    
      return rb.getString(key).trim();// 去掉空格,返回内容
    }

     

    最后一个类:

    import java.io.BufferedWriter;
    import java.io.File;
    import java.io.FileOutputStream;
    import java.io.OutputStreamWriter;
    import java.io.StringWriter;
    import java.util.Iterator;
    import java.util.Map;
    
    import org.apache.velocity.Template;
    import org.apache.velocity.VelocityContext;
    import org.apache.velocity.app.VelocityEngine;
    
    public class VelocityInfoOp {
      public static void generatorCode(String templateFile, Map<String,Object> contextMap, String path, String fileName,String vmpath){
       VelocityContext context = new VelocityContext();
    
       VelocityEngine ve = new VelocityEngine();
       //获取内容配置文件的路径,同样具体情况具体分析
       String vPath = vmpath +"template";
       System.out.println(vPath);
    
       ve.setProperty("file.resource.loader.path", vPath);
    
       ve.setProperty("input.encoding", "UTF-8");
    
       ve.setProperty("output.encoding", "UTF-8");
    
       ve.init();
    
       for (Iterator<String> i$ = contextMap.keySet().iterator(); i$.hasNext();) {
       String key = i$.next();      context.put(key, contextMap.get(key));    }    Template template = null;    try    {      template = ve.getTemplate(templateFile);    }catch (Exception e){      e.printStackTrace();    }    StringWriter sw = new StringWriter();    if (template != null) {      template.merge(context, sw);    }    File pathTemp = new File(path);    if (!pathTemp.exists())    {      pathTemp.mkdirs();    }    writeFile(pathTemp + "/" + fileName, sw.toString());  }  public static void writeFile(String filePathAndName, String fileContent)  {    try    {      File f = new File(filePathAndName);      if (!f.exists()) {        f.createNewFile();      }      OutputStreamWriter write = new OutputStreamWriter(new FileOutputStream(f), "UTF-8");      BufferedWriter writer = new BufferedWriter(write);      writer.write(fileContent);      writer.close();    } catch (Exception e) {      System.out.println("写文件内容操作出错");      e.printStackTrace();    }  } }

     

    最后放一下配置文件里面的内容

    template.config.properties里面:

    author=SOMEONE
    classPackage=com.test
    codePath=/dev/workspace/test/src

    就是些路径,方便改,你也可以直接写在类里面

     

    template.vm里面:

    ${content}

    这里说明一下

    如果配的是:

    内容为:${content}

    前面map里面,content的内容为111

    文件内容最终会是“内容为:111”

    参数可以是多个,几个参数map就放几个值,键名与参数名一致就行

     

    以上。

  • 相关阅读:
    存储过程
    Apache服务器
    SpringMVC (<context:include-filter>和<context:exclude-filter>的使用)
    虚拟机centos 同一个tomcat、不同端口访问不同的项目
    CentOS系统下搭建tomcat服务器
    nginx配置负载均衡
    配置plsql远程连接oracle数据库
    Nginx安装
    Centos6.5系统关闭防火墙
    禁止Centos7系统yum自动下载更新
  • 原文地址:https://www.cnblogs.com/IceBlueBrother/p/8423105.html
Copyright © 2011-2022 走看看