【问题标题】:Load a resource in Jar在 Jar 中加载资源
【发布时间】:2011-03-23 17:06:48
【问题描述】:

下面是我的Jar 文件的结构

root
 - template.ftl
 - org.project.myproject.App.java

在 App.java 中,我有一行代码希望我指定 directory 以加载 template.ftl。比如:

Line#1: cfg.setDirectoryForTemplateLoading("java.io.File object that represents /directory/for/storing/template/files");

以及下一行代码,读取模板文件

Line#2: Template temp = cfg.getTemplate("template.ftl");

我的问题是我无法指定加载文件的目录路径。要加载的模板文件位于Jar 的根目录中。写的时候,

cfg.setDirectoryForTemplateLoading(new File("."));

上面写着,template.ftl 未找到。

上面Line#1处可以正确设置模板目录的合适代码应该是什么?

【问题讨论】:

    标签: java freemarker


    【解决方案1】:

    我认为这对您不起作用,因为您正在尝试加载一个不作为文件存在但在您的 jar 中的文件。要从 jar 文件中将模板作为输入流读取,您可以这样做:

    this.getClass().getClassLoader().getResourceAsStream("template.ftl");
    

    我认为这应该有助于您走上正轨。

    【讨论】:

    • 模板 temp = cfg.getTemplate("template.ftl"); .. 此行期望指定文件路径。
    • URL url = this.getClass().getClassLoader().getResource("template.ftl");文件 file = new File(url.toURI()); ...这可能会成功
    • 是的..这也正是我从您的回答中得出的结论。非常感谢您提供详细信息。
    • 或者这可能有效... URL url = this.getClass().getClassLoader().getResource("");文件 file = new File(url.toURI()); cfg.setDirectoryForTemplateLoading(文件); ...我现在只是把东西扔在那里
    【解决方案2】:
    Line#2: Template temp = cfg.getTemplate("/template.ftl");
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-10-09
      • 1970-01-01
      • 1970-01-01
      • 2015-05-03
      • 2018-03-26
      • 2016-02-18
      • 1970-01-01
      相关资源
      最近更新 更多