Java 速度';s FileResourceLoader可以';找不到资源

Java 速度';s FileResourceLoader可以';找不到资源,java,velocity,Java,Velocity,我使用Velocity来加载电子邮件模板。这些模板首先从FTP服务器下载,然后保存为临时文件 但是,当我尝试加载模板时,出现了一个异常: org.apache.velocity.exception.ResourceNotFoundException:找不到资源“C:\Users\someUsername\AppData\Local\Temp\template15260509969684865454.html” 我确信文件在那里,没有损坏 这就是我尝试加载模板的方式: template=veloc

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

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

我确信文件在那里,没有损坏

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

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

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


那么问题出在哪里呢?这是因为默认情况下AppData文件夹是隐藏的吗?

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

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

ve.setProperty("file.resource.loader.path", "");
ve.init();
Template template = ve.getTemplate("C:\\Users\\someUsername\\AppData\\Local\\Temp\\template1526050996884865454.html");
解决方案2:
路径设置为临时文件的公共根目录,并仅将与该路径相关的路径交给它:

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

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

在我看来,您的
.path
属性是错误的。我也尝试过,但没有指定
.path
属性。它只是默认为这个值。同样根据这个值是正确的。正确的,但是“.”是当前的目录检查这个,你可能需要调用
Velocity.init()
。我也有类似的问题。我的答案是冗长的解释,没有任何意义@RC。你是对的!我以前尝试过指定路径,所以我认为现在它不会有帮助。我没有注意到的是,我的`\`字符没有转义,因此路径格式不正确。如果你能提出一个答案,我很乐意投赞成票并接受。
ve.setProperty("file.resource.loader.path", "C:\\Users\\someUsername\\AppData\\Local\\Temp");
ve.init();
Template template = ve.getTemplate("template1526050996884865454.html");