Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java FileNameFilter和FileFilter的用法_Java_File_Filefilter - Fatal编程技术网

Java FileNameFilter和FileFilter的用法

Java FileNameFilter和FileFilter的用法,java,file,filefilter,Java,File,Filefilter,我正在编写一个简单的程序,以递归方式列出目录中的文件.class 最初,我将其编码为: public class Parsing{ public static void main(String[] args) { File f=new File(".\\"); readRecursive(f); } private static void readRecursive(File f) { String[] files=f

我正在编写一个简单的程序,以递归方式列出目录中的文件.class

最初,我将其编码为:

public class Parsing{

    public static void main(String[] args) {
        File f=new  File(".\\");
        readRecursive(f);
    }

    private static void readRecursive(File f) {
        String[] files=f.list(  new FilterByteCode());
        if(null==files){
            files=new String[0];
        }
        for(String curr: files){
            File currFile=new File(curr);
            System.out.println(currFile.getName());
            readRecursive(currFile);
        }
    }
}//end parsing

class FilterByteCode implements FilenameFilter {


    @Override
    public boolean accept(File dir, String name) {
        if(name.endsWith(".class")){
            return acceptByteCode(dir);
        }else{
            return  (null!=dir && dir.exists() && dir.isDirectory());
        }

    }

        private boolean acceptByteCode(File dir) {
            boolean res= (null!=dir && dir.exists() && dir.isFile());
            return res;
        }

}//FilterByteCode 
但是这个列表只列出目录和子目录,而不是文件

我使用文件过滤器解决了以下问题:

private static void readRecursiveFile(File f) {
        File[] files=f.listFiles(new FilterByteCode2());
        if(null==files){
            files=new File[0];
        }
        for(File curr: files){
            System.out.println(curr.getName());
            readRecursiveFile(curr);
        }
    }

class FilterByteCode2 implements FileFilter {

    @Override
    public boolean accept(File pathname) {
        if(null!=pathname && pathname.getName().endsWith(".class")){
            return  acceptByteCode(pathname);
        }else{
            return (null!=pathname && pathname.exists() && pathname.isDirectory());
        }
    }//accept

    private boolean acceptByteCode(File dir) {
        boolean res = (null != dir && dir.exists() && dir.isFile());
        return res;
    }

}//FilterByteCode2
这项工作列出了file.class


我看到了FileFilterFilenameFilter之间的差异,但我没有找到行为差异的原因。

中的
dir
参数表示找到文件的父目录,而不是您所期望的文件本身。因此,在其他方法中,
dir.isFile()
FilenameFilter
方法中总是返回
false
,这使得
acceptByteCode()
总是返回
false

什么
“\\\”
应该是什么意思?