从文件读取时java.net.URL缓存

Guy*_*and 6 java io file

似乎java正在为URL(和文件)保存某种缓存.例如,我的类路径中的jar文件中有一个文件"resourcs.txt".该文件的内容是:"版本1"

new java.io.BufferedReader (new java.io.InputStreamReader( new URL("jar", "", "file:test.jar!/resourcs.txt").openConnection().getInputStream())).readLine()
Run Code Online (Sandbox Code Playgroud)

返回"版本1"(如预期的那样)

我将文件内容更改为"版本2"并再次调用此代码.我仍然得到"版本1"

我该如何清除这个"缓存".

注意:我发现它只发生在Linux上.

Yve*_*tin 6

由于jarURL中使用的协议,连接是sun.net.www.protocol.jar.JarURLConnection的一个实例,它受益于sun.net.www.protocol.jar.JarFileFactory中实现的缓存.

源代码确认setUseCache(false)on URLConnection实现将阻止使用该缓存.

我关于Linux/Windows行为差异的假设:来自URLJarFileCloseController接口的关闭事件通知在Windows上被更快地触发,因为它不喜欢保持文件句柄打开太长时间......


Isa*_*eal 5

实际上,简单的答案与 sbridges 给出的答案非常接近,但是您不能使用“new URLConnection(...)”来实例化 URLConnection,因为它是一个抽象类。

你可以这样做:

    URL url = new URL(urlSrt);
    URLConnection con = url.openConnection();
    con.setUseCaches(false);
Run Code Online (Sandbox Code Playgroud)