Java 1.4.2 File.listFiles 无法与 CIFS 安装正常工作 - 解决方法?

标签 java linux cifs

我使用的是 Java 1.4.2 和 Debian 6.0.3。网络中有一个共享的 Windows 文件夹,它使用 CIFS 通过 fstab 正确安装到 /mnt/share/ (例如,它在操作系统中完全可见并允许所有操作)。然而,当我尝试在 Java 中执行此操作时:

System.out.println(new File("/mnt/share/").listFiles().length)

它总是返回0,这意味着listFiles返回的File[]为空。同样的问题也适用于 /mnt/share/ 的每个子目录。 list 也返回空数组。有趣的是,其他 File 函数(例如“create”、“isDirectory”甚至“delete”)也可以正常工作。从 USB 闪存驱动器 (fat32) 安装的目录也可以正常工作。

我在来自不同 Windows 系统的 2 个不同的“共享文件夹”上进行了测试;一种使用基于域的身份验证系统,另一种使用“简单共享”——即访客访问。这种情况看起来很奇怪,因为安装的目录应该成为文件系统的一部分,因此任何程序都可以使用它。至少我是这么认为的。

我想删除程序中的一个目录,目前除了在 listFiles 上递归遍历之外,我没有看到其他方法可以做到这一点,所以这个错误变得相当烦人。我能想到的唯一“解决方法”是以某种方式运行外部 bash 脚本,但这似乎是一个糟糕的解决方案。

编辑:这似乎是 1.4.2 特有的错误,在 Java 6 中一切正常。但我无法迁移,所以问题仍然存在。

您能建议一些解决方法吗?最好不要切换到第三方库而不是 native 库,我不能说我喜欢为了单个代码行而重写整个项目的想法。

最佳答案

Java 1.2起,就有了方法File.getCanonicalFile()。在您使用已安装目录的情况下,您应该以这种方式使用这个目录:

new File("/mnt/share/").getCanonicalFile().listFiles()

关于Java 1.4.2 File.listFiles 无法与 CIFS 安装正常工作 - 解决方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10961237/

相关文章:

python - 从 Python 将按键插入 Linux 控制台

javascript - 自定义 firefox console.log(针对我自己的原型(prototype))

ubuntu-12.04 - Alfresco 4.2c CIFS 配置问题

c# - .net 中的文件传输障碍在 Linux 上使用单声道到 Windows 文件共享

java - 从 div 元素获取文本并修改其整数部分 - Selenium Webdriver (Java)

java - 无法在我的类中使用 onBindViewHolder 实现扩展 RecyclerView.Adapter

java - Tomcat : loading swf into page

java - 将 4 个列表合并为一个的最佳方式

c - 如何遍历Linux上属于文件系统的所有inode?

haskell - cifs 目录中的“cabal 复制”在 `stack build` 期间失败