java listfiles挂在有坏字符的文件上

时间:2011-12-09 01:03:47

标签: java

我有这个代码列出了目录中的所有文件:

File d = getRootDir(cId);
return d.listFiles(new FilenameFilter() {
            public boolean accept(File dir, String name) {             
                return name.endsWith(FILE_EXTENSION);
            }
}

它挂起,因为,dir已损坏并且文件名包含无效字符。有没有另一种方法可以做到这一点,以便我可以获取文件列表而不挂起?

感谢。

3 个答案:

答案 0 :(得分:0)

每当我进行文件操作时,我都会使用apache Commons-io。我发现API比Java自己更容易使用,同时仍然使用标准的File对象。

那就是说我不知道​​切换会不会挂起来列出。

在accept方法中插入日志语句。我推荐一个日志库,但是一个简单的

System.out.println(“检查”+名称+“in”+ dir);

应该足够了。

你现在会挂在哪里,但可能不是原因。也许它并没有因为你认为的原因而挂起,日志声明会为你提供更多相关信息。您可以通过跟踪调试代码深入挖掘,但为此您可能需要下载JDK的源代码。

您的文件中存在导致问题的非法字符是什么?

另外,再看看你的代码。文件名包含文件和扩展名。通过检查结果,如果文件可能没有扩展或不同的扩展,则可能会出现误报。例如:

FILE_EXTENSION =“log”;

虽然它不是您想要的,但会触发以下文件。

  • totolog
  • toto.totolog

你可以在前面添加。之前,如果你有完全控制(不是用户定义的配置),那么它会做,但更清晰的解决方案是提取扩展并进行比较。只需简单调用FilenameUtils.getExtension即可。

答案 1 :(得分:0)

您是否尝试过d.list()并对其进行迭代以确定您的接受?问题可能出在FilenameFilter中,而不是文件列表上的实际迭代。

答案 2 :(得分:0)

你在Windows上吗?你试过chkdsk吗? (不过你现在这样做了。)