尝试获取ftl模板时找不到文件异常

时间:2016-10-07 14:11:44

标签: java freemarker filenotfoundexception

我写了一个java程序,我必须在其中渲染一个ftl并获取String变量的输出。 请在下面找到我的代码:

Configuration cfg = new Configuration();
StringWriter stringWriter = new StringWriter();
try 
{
       Template template = cfg.getTemplate("src/response.get.html.ftl");
       model.put("content",contextModel);
       template.process(model, stringWriter);
       System.out.println(stringWriter);

} 

但是Template template = cfg.getTemplate("src/response.get.html.ftl");

中的文件未找到异常

我已将我的回复文件放在 src 和我的java文件包 com.test.webscripts 中。根据{{​​3}}它的罚款。但我无法弄清楚为什么我会得到例外。有人可以帮助我吗?

提前致谢!

3 个答案:

答案 0 :(得分:1)

通常src在运行时不可访问,因为它只适用于编译器和其他构建工具。构建完成后,应用程序应该只依赖于构建的输出(“二进制”),即使在IDE中src仍然存在(与部署应用程序时不同)。

此外,您还没有显示您使用的TemplateLoader。你应该做这样的事情:

cfg.setClassForTemplateLoading(SomeClassInMyApp.class, "/");

然后:

cfg.getTemplate("response.get.html.ftl");

创建子目录是一种更安全的做法,比方说com/mycompany/myapp/templates,并将模板放在那里。在这种情况下,你需要这个:

cfg.setClassForTemplateLoading(SomeClassInMyApp.class, "/com/mycompany/myapp/templates");

请注意,cfg.getTemplate("response.get.html.ftl"保持不变,因为您指定了相对于模板目录的路径。

答案 1 :(得分:0)

请检查您的PATH环境变量,它是否包含工作区的路径和项目路径?如果不是,那可能会导致错误。

解决错误的另一种简单方法是更改​​以下行中的路径:

  

模板模板= cfg.getTemplate(“src / response.get.html.ftl”);

而不是'src / response.get.html.ftl'插入从根目录到文件的完整路径。即:'c://workspac/username/com/companyname/projectName/src/response.get.html.ftl'

注意:如果您正在使用Windows,请确保您的文件没有hidden extension

答案 2 :(得分:0)

我建议您使用方法getResource(),例如,在这种情况下:

setIconImage(Toolkit.getDefaultToolkit().getImage(Menu.class.getResource("/resource/profut_1.PNG")));