zoukankan      html  css  js  c++  java
  • 0415-File类和FileFilter接口

    package demoFile;
    
    import java.io.File;
    import java.io.FileFilter;
    import java.io.FilenameFilter;
    import java.io.IOException;
    /*
    java.io.file类是文件和目录路径名的抽象表示,主要用于文件和目录的新建、修改和删除。
    静态构造方法:
        public(String pathname):通过给定的路径字符串转换为抽象路径来创建新的File实例
        public(String parent,String child):从父路径字符串和子路径字符串创建File实例
        public(File parent,String child):从抽象路径和子路径字符串创建新的File实例
    2、File类的静态成员变量
        static String pathSeparator:与系统有关的路径分隔符,他表示为一个字符串
        static char pathSeparatorChar:与系统有关的路径分隔符
        static String separator:与系统有关的默认名称分隔符,他表示为一个字符
        static char separatorChar:与系统有关的默认名称分隔符。
     */
    public class Demo01File {
        static int countFile = 0, countDir = 0;
    
        public static void main(String[] args) {
            //文件或者路径可以是有效的,也可以是无效的
            File file = new File("D:\JAVA学习\demo\英语单词.txt");
            System.out.println(file.pathSeparator); //路径分隔符windows是分号;,linux是冒号:
            System.out.println(file.pathSeparatorChar);
            System.out.println(file.separator); //文件名称分隔符windows是反斜杠,linux是正斜杠/
            System.out.println(file.separatorChar);
            getMethod();
            createFile();
            listFile(new File("D:\新天地"));
            System.out.println("文件个数:" + countFile);
            System.out.println("目录个数:" + countDir);
            System.out.println("----------其中:pdf文件有----------");
    //        listPdfFile(new File("D:\新天地"));
    //        listPdfFileInnerClass(new File("D:\新天地"));
    //        listPdfFileInnerClass2(new File("D:\新天地"));
            listPdfFileLambda(new File("D:\新天地"));
        }
    
    /*
    获取方法
        public String getAbsolutePath():返回此File的绝对路径名字符串。
        public String getPath():将此File转换为路径名字符串。
        public String getName():返回由此File表示的文件或目录名称。
        public long length():返回由此File表示的文件的长度。
     */
        public static void getMethod() {
    //      如果File创建参数使用了绝对路径则getPath返回的也是绝对路径
            File fl = new File("JAVA学习笔记_File类和IO流.docx");
            System.out.println(fl.getAbsolutePath());//返回绝对路径 D:JAVA学习demoJAVA学习笔记_File类和IO流.docx
            System.out.println(fl.getPath());//返回相对路径 JAVA学习笔记_File类和IO流.docx
            System.out.println(fl.getName());//返回文件名 JAVA学习笔记_File类和IO流.docx
            System.out.println(fl.length()); //返回文件大小字节数,无文件返回0
        }
    /*
    判断方法
        public Boolean exists():判断文件或目录是否存在
        public Boolean isDirectory():判断是否为目录
        public Boolean isFile():判断是否为文件
    创建和删除方法
        public Boolean createNewFile():仅当具有该名称的文件不存在时,创建一个新的空文件
        public Boolean delete():删除由此File表示的目录或文件
        public Boolean mkdir():创建有此File表示的文件目录
        public Boolean mkdirs():创建有此File表示的目录,包括任何必需不存在的父目录
     */
        public static void createFile() {
            String path = (new File("")).getAbsolutePath();
            File f = new File(path, "myDir");
            if (!f.exists()) {
                f.mkdirs();
            } else {
                System.out.println("目录已存在。");
            }
            f = new File(f, "我爱你中国.txt");
            try {
                f.createNewFile();
            } catch (IOException e) {
                System.out.println(e);
            }
            f.delete();
        }
    /*
        File类的遍历方法
            public String[] list() 返回一个String数组,表示该File类中所有的子文件和目录
            public File[] listFiles() 返回一个File数组,表示该File类中所有的子文件和目录
    */
        //使用递归罗列目录中存在的所有子目录和文件
        public static void listFile(File f) {
            System.out.println(f);
            File[] lf = f.listFiles();
            for (File file : lf) {
                if (file.isDirectory()) {
                    countDir++;
                    listFile(file);
                } else {
                    System.out.println(file);
                    countFile++;
                }
            }
        }
    
        //通过过滤器仅返回目录和pdf文档
        public static void listPdfFile(File dir) {
    
            File[] fl = dir.listFiles(new Demo03FileFilterImpl());
            for (File file : fl) {
                if (file.isDirectory()) {
                    listPdfFile(file);
                } else {
                    System.out.println(file);
                }
            }
    
        }
    
        //使用匿名内部类:通过过滤器仅返回目录和pdf文档
        public static void listPdfFileInnerClass(File dir) {
            File[] fl = dir.listFiles(new FileFilter() {
                @Override
                public boolean accept(File pathname) {
                    return pathname.isDirectory()
                            || pathname.toString().toLowerCase().endsWith(".pdf");
                }
            });
            for (File file : fl) {
                if (file.isDirectory()) {
                    listPdfFile(file);
                } else {
                    System.out.println(file);
                }
            }
        }
    
        //使用匿名内部类:文件过滤器的另一个接口类型FilenameFilter
        public static void listPdfFileInnerClass2(File dir) {
            File[] fl = dir.listFiles(new FilenameFilter() {
                @Override
                public boolean accept(File dir, String name) {
    //              参数:dir为遍历的源目录,name为里面的子目录和文件
                    return new File(dir, name).isDirectory() || name.toString().toLowerCase().endsWith(".pdf");
                }
            });
            for (File file : fl) {
                if (file.isDirectory()) {
                    listPdfFile(file);
                } else {
                    System.out.println(file);
                }
            }
    
        }
    
        //使用lambda表达式(匿名内部类优化写法):通过过滤器仅返回目录和pdf文档
        public static void listPdfFileLambda(File dir) {
            //匿名内部类接口只有一个抽象方法的时候,就可以使用lambda表达式来简化
            File[] fl = dir.listFiles((File pathname) -> {
                return pathname.isDirectory()
                        || pathname.toString().toLowerCase().endsWith(".pdf");
            });
            for (File file : fl) {
                if (file.isDirectory()) {
                    listPdfFile(file);
                } else {
                    System.out.println(file);
                }
            }
    
        }
    
    }

    -------FileFilter接口实现类------

    package demoFile;
    
    import java.io.File;
    import java.io.FileFilter;
    
    /*
    文件过滤器:在File类中有两个重载了listFiles的方法,方法参数传递就是过滤器
    java.io.FileFilter接口:用于抽象路径名(File对象)的过滤器。
        作用:用来过滤文件(File对象)
        抽象方法:boolean accept(File pathname) 测试指定抽象路径名是否应该包含在某个路径名列表中。
    java.io.FilenameFilter接口:实现此接口的实现类可以用于过滤文件名。
        作用:用于过虑文件名
        抽象方法:boolean accept(File dir,String name)测试指定文件是否应该包含在某一文件列表中。
    注意:两个过滤器接口是没有实现类的,需要我们自己写实现类,重写过滤的方法accept,在方法中自己定义顾虑的规则。
     */
    public class Demo03FileFilterImpl implements FileFilter {
        /*
        * 过滤规则:如果文件是以.pdf结尾的就返回true,否则返回false
        * 如果传入的是一个文件夹,也要返回true保证调用函数可以继续遍历
        * */
        @Override
        public boolean accept(File pathname) {
            if (pathname.isDirectory()){
                return true;
            }
            return pathname.toString().toLowerCase().endsWith(".pdf");
        }
    }
  • 相关阅读:
    【无私分享:从入门到精通ASP.NET MVC】从0开始,一起搭框架、做项目(8) 权限管理,自定义权限,扩展权限
    致博客园网友
    【无私分享:从入门到精通ASP.NET MVC】从0开始,一起搭框架、做项目(7.2) 模块管理,模块的添加、修改、删除
    【无私分享:从入门到精通ASP.NET MVC】从0开始,一起搭框架、做项目(7.1) 模块管理,验证权限,展示模块列表
    【无私分享:从入门到精通ASP.NET MVC】从0开始,一起搭框架、做项目(6) 控制器基类 主要做登录用户、权限认证、日志记录等工作
    【无私分享:从入门到精通ASP.NET MVC】从0开始,一起搭框架、做项目(5.5) 登录功能的实现,完善登录功能
    【C#公共帮助类】 WebHelper帮助类
    【无私分享:从入门到精通ASP.NET MVC】从0开始,一起搭框架、做项目(5.4) 登录功能的实现,创建与登录用户相关的接口和实现类
    【无私分享:从入门到精通ASP.NET MVC】从0开始,一起搭框架、做项目(5.3) 登录功能的实现,丰富数据表、建立关联
    【无私分享:从入门到精通ASP.NET MVC】从0开始,一起搭框架、做项目(5.2) 登录功能的实现,接口注入、log4net的使用
  • 原文地址:https://www.cnblogs.com/sdlz/p/12721334.html
Copyright © 2011-2022 走看看