java - 如何检查文件是否被另一个进程(Java/Linux)打开?

标签 java linux file

我正在尝试检查某个 java.io.File 是否被外部程序打开。在 Windows 上,我使用这个简单的技巧:

try {
    FileOutputStream fos = new FileOutputStream(file);
    // -> file was closed
} catch(IOException e) {
    // -> file still open
}

我知道基于 unix 的系统允许在多个进程中打开文件...对于基于 unix 的系统是否有类似的技巧来实现相同的结果?

非常感谢任何帮助/破解 :-)

最佳答案

以下是如何将 lsof 用于基于 unix 的系统的示例:

public static boolean isFileClosed(File file) {
    try {
        Process plsof = new ProcessBuilder(new String[]{"lsof", "|", "grep", file.getAbsolutePath()}).start();
        BufferedReader reader = new BufferedReader(new InputStreamReader(plsof.getInputStream()));
        String line;
        while((line=reader.readLine())!=null) {
            if(line.contains(file.getAbsolutePath())) {                            
                reader.close();
                plsof.destroy();
                return false;
            }
        }
    } catch(Exception ex) {
        // TODO: handle exception ...
    }
    reader.close();
    plsof.destroy();
    return true;
}

希望这会有所帮助。

关于java - 如何检查文件是否被另一个进程(Java/Linux)打开?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9341505/

相关文章:

java - 带有 spring-ws 的 spring-boot -SOAP 端点不可访问

java - 在 NetBeans 中生成 getter 和 setter

java - 通过 teamcity 完成部署时日志卡住

linux - 你可以在内核模式之外输入 x64 32 位 "long compatibility sub-mode"吗?

python - 如果另一个文件中存在单词,则从文件中删除单词

python - 安全的加密签名必须驻留在它所引用的文件之外吗?

java - 如何检查Java中是否存在互联网连接?

xml - 如何在xml中写入相对unix路径

java - 将游戏保存到文件

java - PrimeFaces 自定义数据表中的 RowEditor