在java中打开的文件是否可以锁定在afp挂载中?

时间:2010-06-02 15:44:53

标签: java macos locking afp

我正试图通过OSX上的Java 6在挂载点上获取文件锁:

    private void tryLockThroughShare() {
        String path = "/Volumes/Groups/mcm/javaTestInShare.txt";

        try {
            RandomAccessFile raf = new RandomAccessFile(path, "rw");
            FileLock flock = raf.getChannel().tryLock();
            System.out.printf("File %s is %s\n", path, (flock != null) ?
("locked") : ("not locked"));
            raf.write("yoo hoo!".getBytes());
            raf.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

当我使用AFP或SMB安装卷时,即使我可以写文件 在安装的目的地,我无法锁定它们,而是接收: IOException(不支持操作)。

经过一些实验,我发现在设置音量时我可以锁定 使用NFS。

有没有人找到通过SMB或AFP挂载锁定文件的方法?

1 个答案:

答案 0 :(得分:1)

你得到的例外就是IOException (Operation not supported)不同的文件系统具有不同的功能,锁定就是其中之一。维基百科Comparison of file systems虽然它没有提到锁定确实使这一点清楚。

当您通过SMB或AFP访问文件时,您实际上将它们用作文件系统,并且它们是功能不是很丰富的文件系统。遗憾的是,您无法假设存储文件的实际文件系统的所有功能都可通过SMB或AFP获得。

SMB协议的目标是提供对网络上文件,打印机等的共享访问,因为网络上的设备是异构的,协议将其功能限制为最普遍支持的功能。