getClass().getClassLoader().getResourceAsStream()正在缓存资源

Mik*_*ike 12 java velocity classpath

我有一个资源(速度模板),我希望能够在开发过程中交换.然而,

getClass().getClassLoader().getResourceAsStream() 
Run Code Online (Sandbox Code Playgroud)

似乎缓存模板.除了使用文件加载器而不是类加载器之外,有没有办法禁用它?

ser*_*erg 7

为避免缓存,您可以使用:

getClass().getClassLoader().getResource().openStream()
Run Code Online (Sandbox Code Playgroud)

它等于使用URLResourceLoaderVelocity而不是ClasspathResourceLoader我想的.我会选择一个文件加载器.


ksc*_*eid 5

看看这样的东西是否有帮助(省略了异常处理):

URL res = getClass().getClassLoader().getResource(resName);
if (res != null) {
    URLConnection resConn = res.openConnection();
    resConn.setUseCaches(false);
    InputStream in = resConn.getInputStream();
}
Run Code Online (Sandbox Code Playgroud)


Chr*_*est 5

另一件需要注意的事情(除了其他答案中提到的缓存之外)是您的 IDE 或构建系统可能会将您的资源移动到构建目录并将其放在类路径上。因此,您在源目录中编辑的文件不是正在提供服务的文件。