在Jar中加载资源

3
以下是我的Jar文件的结构。
root
 - template.ftl
 - org.project.myproject.App.java

在 App.java 中,我有一行代码需要指定加载 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

应该怎样编写适当的代码,才能在上面的第1行正确设置模板目录呢?

2个回答

3

我认为这对您没有起作用,是因为您试图加载一个在您的jar内不是文件但实际上存在的文件。要从jar文件中读取您的模板作为输入流,您可以执行以下操作:

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

我认为这应该有助于让你走上正确的轨道。

Template temp = cfg.getTemplate("template.ftl"); 这行代码需要指定文件路径。 - Vicky
URL url = this.getClass().getClassLoader().getResource("template.ftl"); File file = new File(url.toURI()); ... 这可能就是解决方法。 - Edd
是的,这正是我从你的回答中得出的结论。非常感谢你的详细解答。 - Vicky
或者这个可能会起作用... URL url = this.getClass().getClassLoader().getResource(""); File file = new File(url.toURI()); cfg.setDirectoryForTemplateLoading(file); ... 我现在只是随便说一些东西。 - Edd

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接