【发布时间】:2012-06-09 13:01:56
【问题描述】:
我正在使用 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 中一切正常。但我无法迁移,所以问题仍然存在。
您能建议一些解决方法吗?最好不要切换到第三方库而不是原生库,我不能说我喜欢为了单个代码行而重写整个项目的想法。
【问题讨论】:
-
您为什么使用 Java 1.4.2?也许您可以尝试使用 Java 7 看看是否能解决问题?
-
因为我的应用程序将在服务器上使用许多其他应用程序,这些应用程序已经运行了很长时间,我公司的高层因为潜在的向后兼容性而害怕迁移问题。不过,尝试使用较新的版本并没有什么坏处。我想是时候在家安装 Debian 了。不过,在我使用它时,如果有任何建议,我将不胜感激。
-
你可以在同一台机器上使用多个版本的java。
-
我知道的很多(实际上我确实安装了 1.6.0 和 1.4.2),只是我没有用另一个版本测试它的想法,但我走了现在下班,提前3天休息。今天问这个问题可能不是最好的主意,但无论如何。