【问题标题】:How to access network paths from Java on OSX?如何在 OSX 上从 Java 访问网络路径?
【发布时间】:2014-02-07 18:22:39
【问题描述】:

我尝试在 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”访问文件夹(使用访客用户)。怎么了?

EDIT添加了 NIO.2 测试

【问题讨论】:

  • smb://xxx 不是 File 类的有效路径名,请参阅 API (docs.oracle.com/javase/7/docs/api/java/io/File.html)。在 UNIX 上,必须始终以 / 开头。在 Windows 上,您还可以使用 UNC 路径名。所以安东尼的回答是正确的。
  • Java NIO.2 怎么样?
  • 您可以测试自己:Path path = Paths.get(URI.create("smb://myserver/transfer")); Files.exists(path). 但我对默认的FileSystemProvider 并不幸运,而且据我所知,没有可插入的CIFS 感知FileSystemProvider 可用.
  • @TimBüthe 可以,但不能。 Java 的文件 IO 采用最小公分母方法,并且可能只使用可移植 C 可用的任何内容。碰巧访问 SMB 文件系统与在 OS X 中相比,连接到 Windows 的级别要低得多,因此 Java 在那里利用了它。如果 Java 自带该协议的自己的实现,则打开 smb: URL 将起作用,因为 URL 方案处理并不严格依赖于操作系统支持。除了也没有期望是这种情况。 (我猜你只会得到通常的file:http:。)
  • @Pragnani Anthony 的回答是正确的,所以我现在就接受了。 Java 似乎没有为此提供开箱即用的解决方案。

标签: java macos


【解决方案1】:

要么挂载分区并作为任何本地目录访问它,要么使用专用库,例如​​JCIFSApache Commons VFS

【讨论】:

    猜你喜欢
    • 2021-11-17
    • 1970-01-01
    • 2017-05-08
    • 1970-01-01
    • 2021-04-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多