此Java代码列出Windows共享驱动器上目录中的文件。它能在Unix系统上正常工作吗?
File directory = new File("\\\\server/Shared/stuff/mystuff");
for (File file: directory.listFiles()) {
System.out.println(file);
}
答案 0 :(得分:8)
简短回答:不。
答案很长:你有samba安装吗?即便如此,您还需要安装共享。所以它可能不起作用。
修改强>
Java最终将调用委托给底层操作系统。由于Unix不知道\\SERVERNAME
路径的含义,Java也不知道它的含义。要做到这一点,您需要做的是使用Samba显式安装驱动器。如果您运行的是Ubuntu,则另一个选项是.gvfs
目录下的home
。 Ubuntu为您的Samba共享创建一个挂载,您应该能够使用Java访问它。如果您不想依赖外部工具,请尝试JCIFS获取纯Java解决方案。
答案 1 :(得分:3)
没有... 只需让用户选择正确的路径并使用操作系统相关的文件选择对话框。
答案 2 :(得分:2)
在我的系统上(Debian Sid与Gnome 2.30桌面)我必须选择“smb:/// server / Shared / ...”来实现相同的行为。我认为,使用smbfs驱动程序的GVFS(Gnome虚拟文件系统)在后台处理真正的连接......
答案 3 :(得分:1)
不,因为那是一个UNC路径,这是一个windowsism。
您是否尝试从unix访问Windows共享?然后看看jcifs。
答案 4 :(得分:1)
我看到这个时遇到的反问题是:“为什么要在应用程序中硬编码路径?”
即使它只是用于示例,并且您打算从属性文件或任何内容加载路径,我仍然认为您在这里错误的轨道。
首先,你要避免像瘟疫这样的绝对路径。相对路径是好的。您可以在硬编码的路径中使用斜杠('/')字符,它可以在Windows和Linux / Mac上运行。基本上所有平台。
其次,为什么要使用路径呢?这是互联网时代。使用网址! file:URL将完成与文件路径相同的操作,但使用URL可使您的应用程序接受来自其他来源(如网站和FTP)的资源。
首先,避免使用File类。如果你发明了一个很好的方法,你完全没有木工。将URL与getResource和getResourceAsStream一起使用,您的应用程序将独立于平台,并通过互联网跨越网络边界。