我有这个代码列出了目录中的所有文件:
File d = getRootDir(cId);
return d.listFiles(new FilenameFilter() {
public boolean accept(File dir, String name) {
return name.endsWith(FILE_EXTENSION);
}
}
它挂起,因为,dir已损坏并且文件名包含无效字符。有没有另一种方法可以做到这一点,以便我可以获取文件列表而不挂起?
感谢。
答案 0 :(得分:0)
每当我进行文件操作时,我都会使用apache Commons-io。我发现API比Java自己更容易使用,同时仍然使用标准的File对象。
那就是说我不知道切换会不会挂起来列出。
在accept方法中插入日志语句。我推荐一个日志库,但是一个简单的
System.out.println(“检查”+名称+“in”+ dir);
应该足够了。
你现在会挂在哪里,但可能不是原因。也许它并没有因为你认为的原因而挂起,日志声明会为你提供更多相关信息。您可以通过跟踪调试代码深入挖掘,但为此您可能需要下载JDK的源代码。
您的文件中存在导致问题的非法字符是什么?
另外,再看看你的代码。文件名包含文件和扩展名。通过检查结果,如果文件可能没有扩展或不同的扩展,则可能会出现误报。例如:
FILE_EXTENSION =“log”;
虽然它不是您想要的,但会触发以下文件。
你可以在前面添加。之前,如果你有完全控制(不是用户定义的配置),那么它会做,但更清晰的解决方案是提取扩展并进行比较。只需简单调用FilenameUtils.getExtension即可。
答案 1 :(得分:0)
您是否尝试过d.list()并对其进行迭代以确定您的接受?问题可能出在FilenameFilter中,而不是文件列表上的实际迭代。
答案 2 :(得分:0)
你在Windows上吗?你试过chkdsk吗? (不过你现在这样做了。)