1

我正在尝试通过 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 挂载上锁定文件的方法?

4

1 回答 1

1

你得到的例外说明了一切IOException (Operation not supported)不同的文件系统具有不同的功能,锁定就是其中之一。文件系统的维基百科比较虽然没有提到锁定,但确实清楚地说明了这一点。

当您通过 SMB 或 AFP 访问文件时,您实际上是在使用它们作为文件系统,它们是功能不是很丰富的文件系统。不幸的是,您不能假设存储文件的实际文件系统的所有功能都可以通过 SMB 或 AFP 获得。

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

于 2010-06-02T16:17:34.490 回答