【问题标题】:File not found exception when trying to get the ftl template尝试获取 ftl 模板时找不到文件异常
【发布时间】:2016-10-08 02:47:34
【问题描述】:

我编写了一个 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 包中.根据http://viralpatel.net/blogs/freemaker-template-hello-world-tutorial/ 很好。但我无法弄清楚为什么我会得到例外。有人可以帮帮我吗?

提前致谢!

【问题讨论】:

    标签: java freemarker filenotfoundexception


    【解决方案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" 保持不变,因为您在此处指定相对于模板目录的路径。

    【讨论】:

      【解决方案2】:

      请检查您的 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。

      【讨论】:

      • @roremy :感谢您的快速回复...我需要构建 jar 并使用它。因此,如果我对路径进行硬编码,如果其他人使用此 jar,它将无法正常工作。
      • 在这种情况下,您可以做 2 件事之一:将项目路径添加到 PATH 环境变量或将文件插入到您组织的任何其他成员都可以访问的通用和公共目录.对于您的本地检查(以确保您可以在自己的计算机上使用该文件),您可以使用完整的硬编码路径,这是解决该错误的一小步。
      【解决方案3】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-11-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-05-30
        相关资源
        最近更新 更多