FileChannel的Lock方法怎么总报错

我想在一个线程中读取文件,当该线程读取该文件时,其他线程不能对该文件操作,我的代码如下:

File file=new File("/root/test.txt");
try {
FileInputStream fis=new FileInputStream(file);
FileChannel fc=fis.getChannel();
fc.tryLock();
byte[] buf = new byte[1024];
        StringBuffer sb=new StringBuffer();
        while((fis.read(buf))!=-1){
            sb.append(new String(buf));   
            buf=new byte[1024];//重新生成,避免和上次读取的数据重复
        }
        System.out.println(sb.toString());
        fc.close();
fis.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}

可是,程序却总报出如下异常:
Exception in thread "main" java.nio.channels.NonWritableChannelException
at sun.nio.ch.FileChannelImpl.tryLock(FileChannelImpl.java:818)
at java.nio.channels.FileChannel.tryLock(FileChannel.java:967)
at chb.mail.Calendar_chb.main(Calendar_chb.java:22)

利用同样的方法在写文件时就没有问题,各位达人啊。

你可能感兴趣的:(thread,linux,windows,.net,sun)