日期:2014-05-20  浏览次数:20606 次

关于FilenameFilter的一个问题,为何无法过滤非当前文件夹中的文件夹
用此过滤器过滤当前文件夹是可以的,也没有问题,但当我将文件夹的路径不设置成当前文件夹,也就是“.”之外,如果过滤指定的文件时,是可以的,但是如果要过滤文件夹就不行了。求解。


核心代码:
  File f = new File("/");
//String[] s = f.list();//用此可以得到所有文件以及文件夹
String[] s = f.list(new MyfileNameFiltter());用此只能过滤指定文件,不能过滤文件夹
for(String a :s){
System.out.println(a);

}
System.out.println(s.length);
}

下面是实现接口的类:
public class MyfileNameFiltter implements FilenameFilter{

@Override
public boolean accept(File dir, String name) {
return (new File(name).isDirectory());//想得到文件夹却不能成功
// || name.endsWith(".jpg") 如果过滤jpg文件是可以的
}


}



大家有遇到这样子的问题么?请高手解答一下,谢谢!

------解决方案--------------------
java.io.FileFilter

boolean accept(File pathname) 
Tests whether or not the specified abstract pathname should be included in a pathname list.

你实现的是哪个FileFilter? 
使用@Override都没有提示错误,肯定不是java.io.FileFilter

@Override
public bool accept(File pathname) {
return pathname.isDirectory() || getName().match(".extension$"); // match这部分可以自己实现 
}
------解决方案--------------------
Java code

public static void main(String[] args) {

        File file = new File("E:\\");
        String[] files = file.list(new FilenameFilter() {

            @Override
            public boolean accept(File dir, String name) {
                return !(new File(dir, name)).isDirectory();
            }
        });

        for (String string : files) {
            System.out.println(string);
        }
    }