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就放几个值,键名与参数名一致就行

     

    以上。

  • 相关阅读:
    547. Friend Circles
    399. Evaluate Division
    684. Redundant Connection
    327. Count of Range Sum
    LeetCode 130 被围绕的区域
    LeetCode 696 计数二进制子串
    LeetCode 116 填充每个节点的下一个右侧节点
    LeetCode 101 对称二叉树
    LeetCode 111 二叉树最小深度
    LeetCode 59 螺旋矩阵II
  • 原文地址:https://www.cnblogs.com/IceBlueBrother/p/8423105.html
Copyright © 2011-2022 走看看