【问题标题】:Will this work on Unix?这可以在 Unix 上工作吗?
【发布时间】:2010-06-23 17:26:01
【问题描述】:

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

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

【问题讨论】:

  • 使用像这样的混合文件分隔符?看到它起作用,我会感到非常惊讶。
  • 你可以参考这个问题---stackoverflow.com/questions/3100625/…
  • 遇到 FileNotFoundException! :D

标签: java filesystems


【解决方案1】:

简短回答:不。

长答案:您安装了 samba 吗?即使这样,您也需要安装共享。所以它可能行不通。

编辑

Java 最终将调用委托给底层操作系统。由于 Unix 不知道 \\SERVERNAME 路径的含义,Java 也不知道它的含义。要让它工作,您必须做的是使用 Samba 显式安装驱动器。如果您正在运行 Ubuntu,您的另一个选择是在您的 home 目录中的 .gvfs 下查找。 Ubuntu 在那里为您的 Samba 共享创建一个挂载,您应该能够使用 Java 访问它。如果您不想依赖外部工具,请尝试JCIFS 以获得纯 Java 解决方案。

【讨论】:

    【解决方案2】:

    不... 只需让用户选择正确的路径并使用依赖于操作系统的文件选择对话框。

    【讨论】:

      【解决方案3】:

      在我的系统(带有 Gnome 2.30 桌面的 Debian Sid)上,我必须选择“smb:///server/Shared/...”才能实现相同的行为。我认为,使用 smbfs 驱动程序的 GVFS(Gnome 虚拟文件系统)在后台处理真正的连接......

      【讨论】:

        【解决方案4】:

        不,因为那是一个 UNC 路径,这是一个 windowsism。

        您是否尝试从 unix 访问 Windows 共享?那就看看jcifs吧。

        【讨论】:

          【解决方案5】:

          看到这个问题时我得到的反问是:“为什么要在应用程序中硬编码路径?”

          即使只是为了示例,并且您打算从属性文件或任何内容加载路径,我仍然认为您在这里走错了路。

          首先你要避免像瘟疫那样的绝对路径。相对路径还可以。您可以在硬编码的路径中使用斜杠 ('/') 字符,它适用于 Windows 和 Linux/Mac。基本上所有平台。

          其次,为什么要使用路径?这是互联网时代。使用网址!文件:URL 将完成与文件路径相同的事情,但使用 URL 会使您的应用程序接受来自其他来源的资源,例如网站和 FTP。

          第三,避免使用 File 类。如果你发明了一个好的方法来做到这一点,你就完全脱离了木制品。将 URL 与 getResource 和 getResourceAsStream 一起使用,您的应用将独立于平台并通过 Internet 跨网络边界运行。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2018-04-04
            • 1970-01-01
            • 1970-01-01
            • 2011-07-09
            • 2014-10-09
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多