如何在Java中关闭文件和/或知道某个文件在代码中的什么位置被锁定?
显然,我总是调用如何在Java中关闭文件和/或知道某个文件在代码中的什么位置被锁定?,java,file,file-locking,Java,File,File Locking,显然,我总是调用FileReader#close()和FileWriter#close(),但我的一些文件仍然被我自己的代码锁定 如何 1) 完全关闭文件 2) 检查,在代码中它是在哪里打开的,而不是在哪里关闭的?这个问题很模糊,缺少上下文,因此很难回答,也会鼓励假设,从来都不是一个好的起点 然而,如果你正在做类似的事情 try { FileReader fr = new FileReader(new File("...")); // Read file... fr.cl
FileReader#close()
和FileWriter#close()
,但我的一些文件仍然被我自己的代码锁定
如何
1) 完全关闭文件
2) 检查,在代码中它是在哪里打开的,而不是在哪里关闭的?这个问题很模糊,缺少上下文,因此很难回答,也会鼓励假设,从来都不是一个好的起点 然而,如果你正在做类似的事情
try {
FileReader fr = new FileReader(new File("..."));
// Read file...
fr.close();
} catch (IOException exp) {
exp.printStackTrace();
}
然后,如果由于某种原因发生异常(或者代码在到达close
语句之前返回),则永远不会调用close
在Java7之前,通常会执行以下操作
FileReader fr = nulll;
try {
fr = new FileReader(new File("..."));
// Read file...
} catch (IOException exp) {
exp.printStackTrace();
} finally {
try {
// Avoid NullPointerException's
if (fr != null) {
fr.close();
}
} catch (Exception exp) {
}
}
这确保了无论在try catch
之间发生什么,始终会调用finally
,并且您可以采取步骤确保资源已关闭
使用Java7,您现在可以利用该功能
try (FileReader fr = new FileReader(new File("..."))) {
fr = ;
// Read file...
} catch (IOException exp) {
exp.printStackTrace();
}
这基本上是try catch finally
示例块的一个简短版本
如果您使用的是
FileLock
功能,那么您还需要确保在完成时释放FileLock
,方式与上面的try catch finally
示例类似,但文件锁定只会确保不同进程不能同时读取/写入文件,它不能防止多线程访问…调用#close()
会完全关闭文件。您可能因为处理异常或其他原因而漏掉了一些调用。因此,如何找到忘记文件的地方?DunNO,但如果您总是首先使用资源尝试,就不会有这样的问题。请考虑提供一个演示您的问题的方法。这将减少混乱和更好的响应,您如何处理文件读/写的示例就是所需的全部。。。