看起来java对URL (& files)有某种缓存。例如,我在类路径中的jar文件中有一个文件"resourcs.txt“。此文件的内容为:"Version 1“
new java.io.BufferedReader (new java.io.InputStreamReader( new URL("jar", "", "file:test.jar!/resourcs.txt").openConnection().getInputStream())).readLine()返回“版本1”(如预期)
我将文件内容更改为“version2”,并再次调用此代码。我仍然得到了“版本1”
我如何清除这个“缓存”。
注意:我发现这种情况只发生在Linux上。
发布于 2012-07-29 22:00:23
由于您的网址中使用的是jar协议,因此该连接是sun.net.www.protocol.jar.JarURLConnection的一个实例,它利用了在sun.net.www.protocol.jar.JarFileFactory中实现的缓存
源代码确认URLConnection实现上的setUseCache(false)将阻止该缓存的使用。
我对Linux/Windows行为差异的假设是:来自URLJarFileCloseController接口的关闭事件通知在Windows上触发得更快,因为它不喜欢长时间保持文件句柄打开……
发布于 2014-01-22 00:09:56
实际上,简单的答案与sbridge给出的答案非常接近,但是您不能使用“URLConnection URLConnection(...)”来实例化新的类,因为它是一个抽象类。
你可以这样做:
URL url = new URL(urlSrt);
URLConnection con = url.openConnection();
con.setUseCaches(false);发布于 2012-07-29 12:45:30
可以使用以下命令关闭url连接的缓存:
URLConnection con = new URLConnection(new URL("jar", "", "file:test.jar!/resourcs.txt"));
con.setUseCaches(false);
new BufferedReader (new InputStreamReader(con.getInputStream())).readLine();https://stackoverflow.com/questions/11569511
复制相似问题