gpt4 book ai didi

java - Velocity的FileResourceLoader找不到资源

转载 作者:行者123 更新时间:2023-12-02 04:03:17 25 4
gpt4 key购买 nike

我使用 Velocity 来加载电子邮件模板。这些模板首先从 FTP 服务器下载,然后保存为临时文件。

但是,当我尝试加载模板时,出现异常:org.apache.velocity.exception.ResourceNotFoundException:无法找到资源“C:\Users\someUsername\AppData\Local\Temp\template1526050996884865454.html”

我确信该文件在那里并且没有损坏。

这就是我尝试加载模板的方式:

template =velocityEngine.getTemplate(tempFile.getCanonicalPath());

这是我加载的velocity.properties 文件(并且我已检查属性是否已正确初始化!)

file.resource.loader.class=org.apache.velocity.runtime.resource.loader.FileResourceLoader
file.resource.loader=file
file.resource.loader.path=.

那么问题出在哪里呢?是不是因为AppData文件夹默认是隐藏的?

最佳答案

我认为 Velocity FileResourceLoader 存在设计缺陷。基本上,如果您的 file.resource.loader.path 不是空字符串,它将破坏作为文件传递给它的任何绝对路径。此外,它还具有 Unix/Linux 特定的代码,用于“截断”(解释实际的代码注释)传递给它的绝对文件路径(将损坏的绝对路径重新设置为当前 path 设置) )。

解决方案 1:file.resource.loader.path 设置为空字符串(在 init() 之前),并使用绝对文件路径作为 file参数

ve.setProperty("file.resource.loader.path", "");
ve.init();
Template template = ve.getTemplate("C:\\Users\\someUsername\\AppData\\Local\\Temp\\template1526050996884865454.html");

解决方案 2:路径设置为临时文件的公共(public)根,并仅传递相对于此的路径:

ve.setProperty("file.resource.loader.path", "C:\\Users\\someUsername\\AppData\\Local\\Temp");
ve.init();
Template template = ve.getTemplate("template1526050996884865454.html");

最终,我认为如果 FileResourceLoader 类检测到作为文件名传递给它的任何绝对路径,而不是尝试将 path 设置混入其中,那么它会更好.

关于java - Velocity的FileResourceLoader找不到资源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34662161/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com