Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/361.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Java中关闭文件和/或知道某个文件在代码中的什么位置被锁定?_Java_File_File Locking - Fatal编程技术网

如何在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,但如果您总是首先使用资源尝试,就不会有这样的问题。请考虑提供一个演示您的问题的方法。这将减少混乱和更好的响应,您如何处理文件读/写的示例就是所需的全部。。。