大家好,我现在要读取一个文件,而且要保证在读取的时候这个文件不会被其他程序修改,我想使用FileLock来锁住文件。但是不知道怎么操作。请高手帮忙。以下是文件的读取
BufferedReader reader = new BufferedReader(new FileReader(a));
// 操作
reader.readLine();
reader.close();怎么在上面的代码里加锁。保证文件读取同步

解决方案 »

  1.   

    import java.nio.channels.*; 
    /**
    * 锁住文件(不让其它线程或进程修改)
    *
    * @author kingfish
    */public class LockFile{
    public LockFile(){
    }public static void main(String[] args) throws Exception {
     
            RandomAccessFile raf=new RandomAccessFile(new File("c:\\test.txt"),   "rw");
            FileChannel   fc=raf.getChannel();
            FileLock   fl=fc.tryLock();
            if(fl.isValid())   {
                System.out.println("get   the   lock!");
                //测试线程
                new   Thread()   {
                    public void run(){
                        while(true){
                            try{
                                Thread.sleep(100);
                                FileReader fr=new FileReader(new File("c:\\test.txt"));
                                int   c;
                                while((c=fr.read())!= -1)   {
                                    System.out.println("OK="+(char)c);
                                }
                                fr.close();
                                break;
                            }
                            catch(Exception  e){
                                System.out.println("error="+e);
                            }
                        }
                    }
                }.start();
                //模拟其它操作的耗时:比如用notepad打开无法修改。但是用程序来读写此文件都会异常
                raf.write("kingfish(八百里秦川@龙城异客)".getBytes());
                Thread.sleep(5000);
                fl.release();
                System.out.println("release the lock!");
            }
            raf.close();
        }
      

  2.   

    程序运行的结果:
      C:\java>java LockFile
        get the lock!
        errorjava.io.IOException: 另一个程序已锁定文件的一部分,进程无法访问。
        errorjava.io.IOException: 另一个程序已锁定文件的一部分,进程无法访问。
        errorjava.io.IOException: 另一个程序已锁定文件的一部分,进程无法访问。
        errorjava.io.IOException: 另一个程序已锁定文件的一部分,进程无法访问。
        errorjava.io.IOException: 另一个程序已锁定文件的一部分,进程无法访问。
        errorjava.io.IOException: 另一个程序已锁定文件的一部分,进程无法访问。
        errorjava.io.IOException: 另一个程序已锁定文件的一部分,进程无法访问。
        errorjava.io.IOException: 另一个程序已锁定文件的一部分,进程无法访问。
        errorjava.io.IOException: 另一个程序已锁定文件的一部分,进程无法访问。
        errorjava.io.IOException: 另一个程序已锁定文件的一部分,进程无法访问。
        errorjava.io.IOException: 另一个程序已锁定文件的一部分,进程无法访问。
        errorjava.io.IOException: 另一个程序已锁定文件的一部分,进程无法访问。
        errorjava.io.IOException: 另一个程序已锁定文件的一部分,进程无法访问。
        errorjava.io.IOException: 另一个程序已锁定文件的一部分,进程无法访问。
        errorjava.io.IOException: 另一个程序已锁定文件的一部分,进程无法访问。
        errorjava.io.IOException: 另一个程序已锁定文件的一部分,进程无法访问。
        errorjava.io.IOException: 另一个程序已锁定文件的一部分,进程无法访问。
        errorjava.io.IOException: 另一个程序已锁定文件的一部分,进程无法访问。
        errorjava.io.IOException: 另一个程序已锁定文件的一部分,进程无法访问。
        errorjava.io.IOException: 另一个程序已锁定文件的一部分,进程无法访问。
        errorjava.io.IOException: 另一个程序已锁定文件的一部分,进程无法访问。
        errorjava.io.IOException: 另一个程序已锁定文件的一部分,进程无法访问。
        errorjava.io.IOException: 另一个程序已锁定文件的一部分,进程无法访问。
        errorjava.io.IOException: 另一个程序已锁定文件的一部分,进程无法访问。
        errorjava.io.IOException: 另一个程序已锁定文件的一部分,进程无法访问。
        errorjava.io.IOException: 另一个程序已锁定文件的一部分,进程无法访问。
        errorjava.io.IOException: 另一个程序已锁定文件的一部分,进程无法访问。
        errorjava.io.IOException: 另一个程序已锁定文件的一部分,进程无法访问。
        errorjava.io.IOException: 另一个程序已锁定文件的一部分,进程无法访问。
        errorjava.io.IOException: 另一个程序已锁定文件的一部分,进程无法访问。
        errorjava.io.IOException: 另一个程序已锁定文件的一部分,进程无法访问。
        errorjava.io.IOException: 另一个程序已锁定文件的一部分,进程无法访问。
        errorjava.io.IOException: 另一个程序已锁定文件的一部分,进程无法访问。
        errorjava.io.IOException: 另一个程序已锁定文件的一部分,进程无法访问。
        errorjava.io.IOException: 另一个程序已锁定文件的一部分,进程无法访问。
        errorjava.io.IOException: 另一个程序已锁定文件的一部分,进程无法访问。
        errorjava.io.IOException: 另一个程序已锁定文件的一部分,进程无法访问。
        errorjava.io.IOException: 另一个程序已锁定文件的一部分,进程无法访问。
        errorjava.io.IOException: 另一个程序已锁定文件的一部分,进程无法访问。
        errorjava.io.IOException: 另一个程序已锁定文件的一部分,进程无法访问。
        errorjava.io.IOException: 另一个程序已锁定文件的一部分,进程无法访问。
        errorjava.io.IOException: 另一个程序已锁定文件的一部分,进程无法访问。
        errorjava.io.IOException: 另一个程序已锁定文件的一部分,进程无法访问。
        errorjava.io.IOException: 另一个程序已锁定文件的一部分,进程无法访问。
        errorjava.io.IOException: 另一个程序已锁定文件的一部分,进程无法访问。
        errorjava.io.IOException: 另一个程序已锁定文件的一部分,进程无法访问。
        errorjava.io.IOException: 另一个程序已锁定文件的一部分,进程无法访问。
        release the lock!
        OK=k
        OK=i
        OK=n
        OK=g
        OK=f
        OK=i
        OK=s
        OK=h
        OK=(
        OK=八
        OK=百
        OK=里
        OK=秦
        OK=川
        OK=@
        OK=龙
        OK=城
        OK=异
        OK=客
        OK=)
      

  3.   

    你不是已经得到一个RandomAcessFile对象了吗? 用它就可以读取文件啦...