File遍历以及FilenameFilter的使用

Posted zzl521

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了File遍历以及FilenameFilter的使用相关的知识,希望对你有一定的参考价值。

首先遍历来一下,这里分为递归与不递归的两种操作:

非递归操作

//非递归复用了 LinkedList
    private static void NotRecursive() {
        LinkedList<File> list=new LinkedList<>();
        int folderNum=0;
        int fileNum=0;
        
        File file=new File("E:/动脑");
        if(file.exists()){
            File[] fs=file.listFiles();
            for(File f1:fs){
                if(f1.isDirectory()){
                    folderNum++;
                    list.add(f1);
//                    System.out.println("Folder Name:"+f1.getName());
                }else{
                    fileNum++;
                    System.out.println("File Name:"+f1.getName());
                }
            }
            File f2;
            while(!list.isEmpty()){
                f2=list.removeFirst();
                fs=f2.listFiles();
                for(File f1:fs){
                    if(f1.isDirectory()){
                        folderNum++;
                        list.add(f1);
//                        System.out.println("Folder Name:"+f1.getName());
                    }else{
                        fileNum++;
                        System.out.println("File Name:"+f1.getName());
                    }
                }
            }
        }else{
            System.out.println("非文件目录");
        }
        System.out.println("FileNum: "+fileNum+"   FolderNum: "+folderNum);
    }

递归操作:并筛选出MP3格式的文件

private static LinkedList<File> Recursive(String path) {
     
        LinkedList<File> list=new LinkedList<>();
        File file=new File(path);
        if(file.exists()){
            File[] fs =file.listFiles();
            for(File f1:fs){
                if(f1.isDirectory()){
                    Recursive(f1.getAbsolutePath());
                }else{
                    if(f1.getName().endsWith("mp3"))
                    list.add(f1);
                    System.out.println("File Name:"+f1.getName());
                }
            }
        }else{
            
        }
        return list;
    }

 

public class DirList {

    public static void main(String[] args) {
        String path="E:/动脑";
        File file=new File(path);
        String[] fs=file.list(new FilenameFilter() {
            private String tag=".mp3";
            @Override
            public boolean accept(File dir, String name) {
                return name.endsWith(tag);
            }
        });
        long l=0;
        Arrays.sort(fs);
        for(String s1:fs){
            System.out.println(s1);
            l+=new File("E:/动脑/"+s1).length();
        }
        
        System.out.println(l/1024/1024);
    }

}

 

以上是关于File遍历以及FilenameFilter的使用的主要内容,如果未能解决你的问题,请参考以下文章

JavaSE8基础 File FilenameFilter 筛选出指定后缀名的文件

45文件过滤器FilenameFilter

FilenameFilter总结

java 19 -14 File类的判断并输出案例

FilenameFilter介绍

文件名过滤器FilenameFilter的用法