我没有一个直接的答案(我也不认为有一个答案,这是在操作系统级别(本机)而不是在JVM级别上控制的),我也没有真正看到答案的价值(一旦发现文件所在的线程,您仍然无法通过编程方式关闭该文件),但是我想您还不知道无法删除通常是由于文件仍处于打开状态引起的。当你这样做可能发生
不
显式调用
Closeable#close()的
InputStream,
OutputStream,
Reader或者
Writer是绕构建
File问题。
基本演示:
public static void main(String[] args) throws Exception { File file = new File("c:/test.txt"); // Precreate this test file first. FileOutputStream output = new FileOutputStream(file); // This opens the file! System.out.println(file.delete()); // false output.close(); // This explicitly closes the file! System.out.println(file.delete()); // true}换句话说,请确保在整个Java IO内容中,代码在使用后正确 关闭
了资源。正常的成语是为此在该
try-with-resources声明中,这样你可以肯定的是,资源总会被释放出来,甚至在的情况下
IOException。例如
try (OutputStream output = new FileOutputStream(file)) { // ...}做到这一点对 任何
InputStream,
OutputStream,
Reader和
Writer等任何工具
AutoCloseable,这你打开
自己 (使用
new关键字)。
在某些实现上,例如在上
ByteArrayOutputStream,从技术上讲,这不是必需的,但是为了清楚起见,只需在每个地方都坚持最后的成语,以免产生误解和重构错误。
如果您尚未使用Java 7或更高版本,请改用以下
try-finally惯用法。
OutputStream output = null;try { output = new FileOutputStream(file); // ...} finally { if (output != null) try { output.close(); } catch (IOException logOrIgnore) {}}希望这有助于查明您特定问题的根本原因。



