微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

防止使用Nio删除锁定文件

如何解决防止使用Nio删除锁定文件

我们要防止其他进程删除正在运行的应用程序的temp目录。这样,我们将在其中创建一个临时目录和一个 lock 文件。我发现阻止删除文件的唯一方法是使用RandomAccessFile

tempDirectory = Files.createTempDirectory("myapp");
final Path lockFile = Files.createTempFile(tempDirectory,"lock",null);
randomAccessFile = new RandomAccessFile(lockFile.toFile(),"rw");

是否可以通过nio实现相同的目的?我尝试使用以下代码

import java.io.*;
import java.nio.channels.*;
import java.nio.file.*;

public class CreateLock {

    public static void main(String[] args) throws IOException,InterruptedException {
        final Path path = Paths.get("C:/temp/test");
        Files.createFile(path);
        final FileChannel channel = FileChannel.open(path,StandardOpenoption.WRITE);
        channel.lock();

        for (int i = 60; i-- > 0; ) {
            System.out.println(i);
            if (!Files.isRegularFile(path)) {
                System.out.println("File is gone");
                break;
            }

            Thread.sleep(10_000);
        }

        channel.close();
    }
}

但使用此代码的第二个Java应用程序

import java.io.*;
import java.nio.file.*;

public class DeleteLock {

    public static void main(String[] args) throws IOException {
        final Path path = Paths.get("C:/temp/test");
        Files.delete(path);
    }
}

可以删除文件

解决方法

请尝试以下操作:

FileChannel ch = FileChannel.open(lockFile.toAbsolutePath(),StandardOpenOption.WRITE);
ch.lock();

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?