我有一个小函数,基本上需要一个java.net.URL,读取文件并关闭它。我希望在读取结束后删除该文件。但是,当进程正在运行时,我甚至无法通过Windows资源管理器删除它。我收到文件仍在使用中的错误消息。这适用于普通文件,但不适用于jar文件。我应该做些不同的事吗?这是我正在使用的代码片段。
更新了代码段:
public static void tryPreOpenConnection(URL url, File file) throws IOException {
URLConnection connection = url.openConnection();
InputStream stream = connection.getInputStream();
stream.read();
stream.close();
System.out.println("Deleted: " + file.delete());
connection = null;
stream = null;
System.gc();
try {
Thread.sleep(10000);
} catch (InterruptedException e) {
// do nothing
}
System.out.println("Deleted: " + file.delete());
}
答案 0 :(得分:0)
您还记得关闭网址连接吗?
另外,您可以发布更大的代码段,以便我们可以看到上下文吗?
答案 1 :(得分:0)
您可以尝试使用Commons Virtual File System。
几天前,我在HttpURLConnection(实现)中遇到了内部缓存的问题。 URLConnection太棒了。 :)
答案 2 :(得分:0)
感谢http://www.genevski.com/2010/04/javaneturl-and-jarurlconnection-may.html。我发现了这个问题。除非 useCaches 属性设置为false,否则连接似乎会阻止该文件。我可以设法通过设置此属性或将我的代码更改为
来解决此问题public static void tryPreOpenConnection(URL url, File file) throws IOException {
JarURLConnection connection = (JarURLConnection) url.openConnection();
JarFile jar = connection.getJarFile();
JarEntry entry = connection.getJarEntry();
InputStream stream = jar.getInputStream(entry);
stream.read();
stream.close();
jar.close();
System.out.println("Deleted: " + file.delete()); // this works
}