先上代码,看实例:<!-- lang:java -->public static void main(String[] args) {try {File file = new File("FileTo
先上代码,看实例:
<!-- 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(),这个方法会尝试获取这个管道的文件的特有的锁,但是不会阻塞。调用的返回结果不是获得锁成功,就是失败。