这会在Unix上运行吗?

时间:2010-06-23 17:26:02

标签: java filesystems

此Java代码列出Windows共享驱动器上目录中的文件。它能在Unix系统上正常工作吗?

File directory = new File("\\\\server/Shared/stuff/mystuff");
for (File file: directory.listFiles()) {
    System.out.println(file);
}

5 个答案:

答案 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一起使用,您的应用程序将独立于平台,并通过互联网跨越网络边界。