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倍的速度差距

 

你可能感兴趣的:(FileLock和NonWritableChannelException)