2013-07-04 63 views
0

我想使用Velocity來模擬我的電子郵件,但我努力給出我的模板的正確路徑:「template.vm」,在我的資源文件夾由maven創建。我使用:class.getResource(「template.vm」)。getPath =>但getResource返回null這是logique原因,因爲我知道template.vm在這種情況下應該是在同一個類的包中,我的所以我使用:class.getResource(「/ template.vm」)。getPath,但它返回一個錯誤的路徑,在我的情況下,template.vm的路徑是:template.vm is on WEB-INF/classesclass.getResource返回我的文件的錯誤路徑

D:/folderOne/FolderTwo/WEB-INF/classes/template.vm和getResource重建:/D:/folderOne/FolderTwo/WEB-INF/classes/template.vm速度類丟失的原因:無法找到資源給定路徑:/D:/folderOne/FolderTwo/WEB-INF/classes/template.vm

我掙扎着t他現在有一天的小問題,請幫忙。

+0

你爲什麼需要這條路?你不能只使用輸入流嗎? – nitind

+0

我需要的路徑,以速度方法加載模板,我使用這樣的速度:模板t = VelocityEngine.getTemplate(字符串名稱)當名稱是模板的名稱:template.vm –

+0

@BadrDRAIFI它的發生,因爲你試圖從上下文獲得路徑,試試這個http://stackoverflow.com/questions/2308188/getresourceasstream-vs-fileinputstream –

回答

1

您應該使用ClassPathResourceLoader而不是FileResourceLoader爲您的速度。如果你使用它,你可以簡單地撥打VelocityEngine.getTemplate("template.vm")

+0

我發現奇怪的是,是爲什麼velocity execption拋出:ResourceNotFoundException:無法找到資源<模板路徑>當模板路徑前綴/這是我認爲是什麼導致整個問題,導致路徑是正確的,因爲我說:D:/ FolderOne/FolderTwo/WEB -INF/classes/template.vm,但當前綴爲/時變爲:/D:/FolderOne/FolderTwo/WEB-INF/classes/template.vm是什麼導致模板無法達到nd拋出異常 –

+1

這是因爲[Class.getResource](http://docs.oracle.com/javase/6/docs/api/java/lang/Class.html#getResource(java.lang.String))返回'URL'。 [URL.getPath](http://docs.oracle.com/javase/6/docs/api/java/net/URL.html#getPath())不符合您的期望。它不返回文件路徑。它返回URL的路徑部分。你的URL是'file:/// D:/ FolderOne/FolderTwo/WEB-INF/classes/template.vm',URL的路徑部分是'/ D:/ FolderOne/FolderTwo/WEB-INF/classes/template .vm'。 –

+0

謝謝@losa幫助! –