为了账号安全,请及时绑定邮箱和手机立即绑定

检查文件是否已打开

检查文件是否已打开

慕慕森 2019-07-11 10:24:23
检查文件是否已打开我需要写一个自定义批文件重命名器。我已经完成了大部分工作,但我不知道如何检查文件是否已经打开。我只是用java.io.File包,还有一个canWrite()方法,但这似乎并不测试该文件是否正在被另一个程序使用。有什么办法让我做到这一点吗?
查看完整描述

3 回答

?
郎朗坤

TA贡献1921条经验 获得超9个赞

整个问题充满了可移植性问题和种族条件:

  • 您可以尝试使用FileLock,但操作系统和/或文件系统不一定支持它。
  • 在Windows上,如果另一个应用程序以特定方式打开文件,则可能无法使用FileLock。
  • 即使你真的设法用

    FileLock

    或者其他问题,您仍然会遇到这样的问题,即在测试文件和重命名之间可能会有一些东西出现并打开文件。

一个简单但不可移植的解决方案是尝试重命名(或您想要做的任何事情),并诊断返回值和/或任何因打开文件而产生的Java异常。

注:

  1. 如果您使用FilesAPI而不是FileAPI在发生故障时将获得更多信息。

  2. 在允许重命名已锁定或打开的文件的系统(例如Linux)上,您不会获得任何失败结果或异常。手术会成功的。但是,在这样的系统上,您通常不需要担心文件是否已经打开,因为操作系统不会锁定打开的文件。


查看完整回答
反对 回复 2019-07-11
?
呼如林

TA贡献1798条经验 获得超3个赞

 //  TO CHECK WHETHER A FILE IS OPENED 
    //  OR NOT (not for .txt files)

    //  the file we want to check
    String fileName = "C:\\Text.xlsx";
    File file = new File(fileName);

    // try to rename the file with the same name
    File sameFileName = new File(fileName);

    if(file.renameTo(sameFileName)){
        // if the file is renamed
        System.out.println("file is closed");    
    }else{
        // if the file didnt accept the renaming operation
        System.out.println("file is opened");
    }


查看完整回答
反对 回复 2019-07-11
  • 3 回答
  • 0 关注
  • 331 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信