Java IO:在文件上创建文件锁

先上代码,看实例:


public static void main(String[] args) {
    try {
        File file = new File("FileToLock.dat");
        // 创建一个随机访问的文件流,来进行读取,同时可以做写操作
        FileChannel channel = new RandomAccessFile(file, "rw").getChannel();
        // 在这个管道的文件上获得一个特有的锁,直到锁被取回,都处于阻塞状态
        FileLock lock = channel.lock();
        try {
            // 在这个管道文件上尝试获取这个特有的锁,进行自旋,如果文件已经被锁住,那么返回null或者一个异常
            channel.tryLock();
        } catch (OverlappingFileLockException e) {
            System.out.println("Overlapping File Lock Error: "
                    + e.getMessage());
        }
        //释放锁
        lock.release();
        //关闭管道
        channel.close();
    } catch (IOException e) {
        e.printStackTrace();
    }
}

这就是用FileChannel创建文件锁的例子;

1:把你想要在锁住的真实文件系统封装成File对象。
2:创建一个随机进入的文件流(读写)。要做到这样就必须创建一个RandomAccessFile来封装上面创建的File对象,然后对读写模式进行选择 ,然后通过 RandomAccessFile的getChannel方法获得管道,从而对数据进行读写操作。
3:通过FileChannel类的lock()方法获得一个channel的文件的特有的锁,这个方法会一直阻塞,直到文件被锁住或者是管道关闭,或者是调用的线程被打断。利用Lock方法,文件就会获得FileLock类的引用。
4:可以使用FileChannel 的tryLock(),这个方法会尝试获取这个管道的文件的特有的锁,但是不会阻塞。调用的返回结果不是获得锁成功,就是失败。

你可能感兴趣的:(Java IO:在文件上创建文件锁)