Possible Duplicate:
Problem with Java file locking mechanism (FileLock etc)




在下面的代码中,我想测试FileLock类。

import java.io.File;
import java.nio.channels.*;
import java.nio.MappedByteBuffer;
import java.io.RandomAccessFile;

class test{
    File f= new File("./in.txt");
    RandomAccessFile in = new RandomAccessFile(f, "rw");
    FileChannel fc = in.getChannel();

    byte[] t = new byte[20];
    in.read(t, 0, 8);
    System.out.println(new String(t));

    FileLock fl = fc.tryLock(0, 4, false);
    if(fl!=null){
        System.out.println("the file has been locked");
        Thread.sleep(10000);
        fl.release();
        System.out.println("no lock!");
    }
    fc.close();
    in.close();
    }
};


但是问题是,当我两次运行“ java测试”时,第一个应该锁定文件in.txt,第二个应该不能访问in.txt,然后不应该在屏幕上打印任何内容。但事实是,第二个字符串也会在屏幕上打印该字符串,即使它按预期返回。并且其他人不应读取0到第3个字节的区域。但实际上并非如此。

但是似乎有问题。如果文件被独占锁定,则其他人将无法访问该文件。但是似乎没有。

最佳答案

FileLock在Linux下不起作用(至少我上次尝试过redhat)。编辑:那是不正确的。我做错了:-)

在Windows Vista / 7/8下,它在我上次尝试时有效。

也许有适用于Linux的文件系统实现。您必须使用[file] .lck临时文件的创建来激发锁定(尽管File.create文档中不建议这样做)。

如果文件不存在,则有一种特殊的原子方法可以创建文件

10-06 13:46