读书人

FileLock跟NonWritableChannelExcepti

发布时间: 2012-10-13 11:38:17 作者: rapoo

FileLock和NonWritableChannelException

?

import java.io.BufferedReader;

import java.io.BufferedWriter;

import java.io.File;

import java.io.FileInputStream;

import java.io.FileNotFoundException;

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.OutputStreamWriter;

import java.nio.channels.FileLock;

?

public class FileReaderLock {

public static void main(String[] args) throws Exception { ?

FileInputStream fos = new FileInputStream("file.txt"); ?

? ? ? ? //获取文件锁 FileLock 对象 ?

? ? ? ? FileLock fl = fos.getChannel().tryLock(); ?

?

? ? ? ? //下面两个都会报错

? ? ? ? FileOutputStream fos1 = new FileOutputStream("file.txt"); ?

// ? ? ? ?fos1.write(1);

? ? ? ? FileInputStream fis = new FileInputStream("file.txt");

// ? ? ? ?fis.read();

? ? ? //tryLock是尝试获取锁,有可能为空,所以要判断?

? ? ? ? if (fl != null) { ?

? ? ? ? ? ? System.out.println("Locked File"); ?

? ? ? ? ? ? Thread.sleep(100); ?

? ? ? ? ? ? fl.release();//释放锁 ?

? ? ? ? ? ? System.out.println("Released Lock"); ?

? ? ? ? } ?

? ? ? ? fos.close(); ?

? ? } ?

}



FileLock不能对只读Channel上锁。将 FileInputStream fis = new FileInputStream(file);改为RandomAccessFile raf = new RandomAccessFile(file, "rw");从RandomAccessFile获得通道就可以了。
但是RandomAccessFile速度比BufferedReader要慢非常多,测试的时候是100倍的速度差距

?

读书人网 >编程

热点推荐