我应该得到目录中包含的文件列表。
我的工作是:
File file = new File(PATH);
for (File index:file.listFiles)
System.out.println(index.toString());
问题在于,这样我打印的文件也是我不应该看到的,例如临时的。
在我的测试目录中,我必须提交: ciao 和 test ,但是当我运行我的代码时,我看到 ciao , ciao~ , test~ ,还有其他东西,如果我修改一个文件(我想它们是缓冲区文件)。
那么,我怎样才能获得 true 文件,就像我在浏览我的文件系统一样?
答案 0 :(得分:4)
如果只想列出其属性(包括名称)服从一组条件的文件,则需要使用另一个.listFiles()
版本,该版本以FileFilter
为参数。此接口具有唯一的accept()
方法,如果可以列出该文件,则返回true。
这个简单的示例将过滤掉名称以~
:
file.listFiles(new FileFilter() {
@Override
public boolean accept(File pathname) {
return !pathname.getName().endsWith("~");
}
})
如果您的FileFilter
比上面的更复杂,请考虑将其外展为变量(private static final
,如果过滤器永远不会更改)。
答案 1 :(得分:1)
使用
if (!index.isHidden()) {
System.out.println(index.toString());
}
禁止隐藏文件。
您还可以查看
index.isDirectory()
如果你不想列出子目录。
但是不要指望一种方法可以读出你所谓的真实(或干净或漂亮)文件。
一旦你现在要排除哪些文件,你可以为自己编写一个过滤器。
有关详情,请参阅java.io.FileFilter
。
答案 2 :(得分:1)
您看不到的文件可能已隐藏,您可以查看:
File file = ...;
if(file.isHidden()){...}