似乎
java正在为URL(& files)保存某种缓存.
例如
我的classpath中的jar文件中有一个文件“resourcs.txt”.
该文件的内容是:
“版本1”
例如
我的classpath中的jar文件中有一个文件“resourcs.txt”.
该文件的内容是:
“版本1”
new java.io.BufferedReader (new java.io.InputStreamReader( new URL("jar","","file:test.jar!/resourcs.txt").openConnection().getInputStream())).readLine()
返回“版本1”(如预期的那样)
我将文件内容更改为“版本2”并再次调用此代码.
我仍然得到“版本1”
我该如何清除这个“缓存”.
注意:我发现它只发生在Linux上.
解决方法
由于URL中使用了jar协议,因此连接是
sun.net.www.protocol.jar.JarURLConnection的实例,它可以从
sun.net.www.protocol.jar.JarFileFactory中实现的缓存中受益
源代码确认URLConnection实现上的setUseCache(false)将阻止使用该缓存.
我关于Linux / Windows行为差异的假设:来自URLJarFileCloseController接口的关闭事件通知在Windows上被更快地触发,因为它不喜欢保持文件句柄打开太长时间……