Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/351.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 - Fatal编程技术网

Java 删除前检查文件或文件夹是否已打开 如何在尝试删除文件/文件夹之前检查其是否已打开

Java 删除前检查文件或文件夹是否已打开 如何在尝试删除文件/文件夹之前检查其是否已打开,java,Java,我正在以编程方式删除它。。删除前,需要检查其是否已打开 我想要这样的东西 if(file/folder is open){ //do not delete it }else{ //delete it } 我尝试了以下两组代码,但都不起作用 File scrptFile=new File(dirFile); boolean isFileUnlo

我正在以编程方式删除它。。删除前,需要检查其是否已打开

  • 我想要这样的东西

                if(file/folder is open){
                   //do not delete it
                }else{
                   //delete it
                 }
    
    我尝试了以下两组代码,但都不起作用

         File scrptFile=new File(dirFile);
         boolean isFileUnlocked = false;
    try {
        org.apache.commons.io.FileUtils.touch(scrptFile);
        isFileUnlocked = true;
    } catch (IOException e) {
        isFileUnlocked = false;
    }
    
    if(isFileUnlocked){
        // Do stuff you need to do with a file that is NOT locked.
        System.out.println("file is not locked");
    } else {
        // Do stuff you need to do with a file that IS locked
        System.out.println("file is locked");
    }
    
    
           File file = new File(dirFile);
    FileChannel channel = new RandomAccessFile(file, "rw").getChannel();
    // Get an exclusive lock on the whole file
    FileLock lock = channel.lock();
    try {
        lock = channel.tryLock();
        // Ok. You get the lock
        System.out.println("Ok. You get the lock");
    } catch (OverlappingFileLockException e) {
        // File is open by someone else
        System.out.println("File is open by someone else");
    } finally {
        lock.release();
    }
    

  • 您可以使用Apache commons io api

      boolean flagFileNotInUse = false;
    try {
        org.apache.commons.io.FileUtils.touch(yourFile);
        flagFileNotInUse = true;
    } catch (IOException e) {
        flagFileNotInUse = false;
    }
    
    //然后检查flagFileNotInUse的值

      flagFileNotInUse = true, means file not in use
      flagFileNotInUse = false, means file in use
    

    这是一个有趣的想法,但考虑到文件锁依赖于操作系统(并且在某些操作系统下有多种不同的方法),可能很难以清晰的方式确定。最好的办法是尝试。如果文件#delete由于某种原因无法删除该文件,则返回false。您可以检查一下,如果您将bool flagFileNotInUse命名或交换标志的值,是否会更清楚?@rferwarda:请参阅更新的帖子。上述代码适用于文件夹,但不适用于File@DarkKnight