先上代码,看实例:
<!-- lang:java -->
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(),这个方法会尝试获取这个管道的文件的特有的锁,但是不会阻塞。调用的返回结果不是获得锁成功,就是失败。