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

问题描述 投票:0回答:2

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

编辑添加了NIO.2测试

java macos
2个回答
6
投票

安装分区并将其作为任何本地目录访问,或者使用专用库,例如JCIFSApache Commons VFS


0
投票

至少,在 SMB 协议的情况下,您可以以通常的方式安装驱动器(在 Finder 中,按 Command + K,输入您的

smb://
路径,输入您的登录名和密码)并使用
 查找文件/Volumes
root 代替主机名,而在 Windows 上主机名保持不变。

假设您已经安装了驱动器

smb://myserver007.company.com/transfer
,并且您可以在 Finder 的绝对根目录中看到它(“Macintosh HD”和“网络”旁边)。 然后你可以像这样读取和处理所需的文件:

File config = Paths.get("/Volumes/transfer", "/innerFolder/file.txt").toFile();
if (config.exists()) {
    //some processing logic
}

它适用于 MacOS 11 及更高版本。甚至可能在版本 10 上。

© www.soinside.com 2019 - 2024. All rights reserved.