我尝试从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 Acciolysmb:
路径时,Finder会自动执行此操作,但那只是Finder而已,不是操作系统级功能。 - millimoosesmb:
URL将起作用,因为URL方案处理不严格依赖于操作系统支持。除了也没有期望是这种情况。(我猜测你只会得到通常的file:
和http:
。) - millimoose