如何在OSX上使用Java访问网络路径?

5

我尝试从Mac OSX上的Java访问网络文件夹/UNC路径。在Windows上,以下测试程序正常工作(至少测试过其中一个路径):

public class PathTest {
    public static void main(String[] args) {

        for (String path : Arrays.asList(
                "\\\\myserver\\transfer", "//myserver/transfer", "file://myserver/transfer", "smb://myserver/transfer")) {

            File f = new File(path);
            System.out.println(path + ": " + f.getAbsolutePath() + ", " + f.exists());

            Path p = Paths.get(path);
            System.out.println(path + ": " + p.toAbsolutePath() + ", " + Files.exists(p));
        }
    }
}

在Mac OS上,它无法访问文件夹:
\\myserver\transfer: /Users/tim/IdeaProjects/PathTest/\\myserver\transfer, false
//myserver/transfer: /myserver/transfer, false
file://myserver/transfer: /Users/tim/IdeaProjects/PathTest/file://myserver/transfer, false
smb://myserver/transfer: /Users/tim/IdeaProjects/PathTest/smb://myserver/transfer, false

当我使用Finder时,我可以通过使用“smb://myserver/transfer”来访问文件夹(使用Guest用户)。有什么问题吗?
编辑:添加了NIO.2测试。

你可以进行测试:Path path = Paths.get(URI.create("smb://myserver/transfer")); Files.exists(path). 但是我在默认的 FileSystemProvider 上没有成功,据我所知,也没有可插拔的 CIFS 感知 FileSystemProvider 可用。 - Anthony Accioly
UNC是Windows-ism,不确定希望它在OS X上工作的期望来自哪里。本地OS X仅使用VFS挂载网络驱动器。当提供smb:路径时,Finder会自动执行此操作,但那只是Finder而已,不是操作系统级功能。 - millimoose
@AnthonyAccioly:我添加了一个NIO.2测试,没有运气。 - Tim Büthe
2
@TimBüthe 可以这样做,但实际上并没有。Java的文件IO采用最低公共分母的方法,并且通常只使用可移植C中可用的任何内容。碰巧在Windows中,访问SMB文件系统比在OS X中更低级别,因此Java在那里利用了它。如果Java带有自己的协议实现,打开smb: URL将起作用,因为URL方案处理不严格依赖于操作系统支持。除了也没有期望是这种情况。(我猜测你只会得到通常的file:http:。) - millimoose
1
@Pragnani Anthony的答案是正确的,所以我现在接受了它。Java似乎没有一个开箱即用的解决方案。 - Tim Büthe
显示剩余7条评论
1个回答

6

你可以将分区挂载并像访问本地目录一样访问它,或者使用专用库,如JCIFSApache Commons VFS


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接