【问题标题】:How to edit, process and save an FTL file using java?如何使用 java 编辑、处理和保存 FTL 文件?
【发布时间】:2015-07-30 18:22:52
【问题描述】:

我有一个代码可以解析 XML 文件、编辑它们并保存它们(为此使用 dom)。现在,我有一些具有 .ftl 扩展名的文件。我已经设法处理具有给定答案的 ftl 文件(使用 freemarker 模板配置),但是,我无法将编辑后的 ​​xml 保存为 FTL。

所有这些都在 Java 中。关于如何实现问题的节省方面的任何建议?

再次,我想用 Java 处理、编辑然后保存一个 FTL 文件。

我正在附加用于处理 ftl 文件的代码。

import java.io.File;
import java.io.FileInputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.io.Writer;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;


import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
import com.google.gson.stream.JsonReader;

import freemarker.template.Configuration;
import freemarker.template.Template;
import freemarker.template.TemplateException;

public class FTLReader {
      public static void main(String[] args) {

            //Freemarker configuration object
            Configuration cfg = new Configuration();
            try {
                //Load template from source folder
                Template template = cfg.getTemplate(filename);

                // Build the data-model

                Map<String,Object> data = new HashMap<String,Object>();
                JsonParser parser = new JsonParser();

                //write code to get answers
                Object obj = parser.parse(new FileReader("src/answers.txt"));
                JsonObject jsonObject = (JsonObject) obj; 
                data.put("element1", jsonObject.get("element1"));


                // Console output 
                Writer out = new OutputStreamWriter(System.out);
                template.process(data, out);
                out.flush();

                /*write code to edit and save the ftl file
                * 
                * 
                * 
                * 
                * */    

                // File output (the processed FTL file)
                Writer file = new FileWriter (new File("C:\\FTL_helloworld.txt"));
                template.process(data, file);
                file.flush();
                file.close();

            } catch (IOException e) {
                e.printStackTrace();
            } catch (TemplateException e) {
                e.printStackTrace();
            }
        }
}

【问题讨论】:

  • 我们需要看一些代码。您可以通过写入某种类型的 OutputStream 来保存文件。但在我们看到您所做的工作之前,很难提出更具体的解决方案。
  • 好的。添加了我用于处理 ftl 文件的代码。目前,作为输出,我得到一个处理过的 FTL 文件。我正在尝试编辑这个处理过的文件(基本上是一个 XML)并将其另存为 FTL 文件。
  • 另外,想补充一点,我要处理的文件基本上是带有freemarker节点的xml文件
  • 我不明白你想要什么。如果我们澄清术语,也许会有所帮助。处理模板意味着使用模板生成输出,并且输出中将不再包含 FTL 构造。正确的?那么“编辑”模板是什么意思?你编辑的是什么?作为 XML? FTL 不是 XML,但精心编写的模板可以。 (处理的)输出可能是 XML,您可以将其视为任何其他 XML。
  • 为问题中的歧义道歉。我有一个用于生成 xml 文件的 FTL 文件。我处理这个 FTL 文件以生成相应的 XML 文件。之后,我对生成的 XML 文件进行了一些更改。完成后,我想更改我的 FTL 文件,以便如果我再次处理它,生成的 XML 文件应该反映我所做的更改。

标签: java xml freemarker


【解决方案1】:

在阅读了您的问题和 cmets 几次之后,我可能终于掌握了您的目标。因此,您必须从代码的开头(Template template = cfg.getTemplate(filename);)“修补”filename 变量后面的文件。 FTL 文件基本上是一个文本文件,因此您可以逐行处理它。然后您必须使用新的文件内容重新初始化您的模板,即再次执行template = cfg.getTemplate(filename);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-04-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-11
    • 2011-11-17
    • 1970-01-01
    • 2023-03-28
    • 1970-01-01
    相关资源
    最近更新 更多