zoukankan      html  css  js  c++  java
  • 过滤器(文件)

    文件中遍历的方法

    遍历目录

    1.public String[] list() 返回String数组,表示File目录中的所有子文件或目录

    2.public File[] listFiles() 返回File数组,表示File目录中的所有子文件或目录(包含路径)

    注意事项:

    1.两个方法遍历的是构造方法给出的目录

    2.如果构造方法给出的目录路径不存在,会抛出空指针异常

    3.如果构造方法给出的不是一个目录也会抛出空指针异常

    public static void method(){
        File file = new File("Month\src\LearnFile");
        /*String[] filestr = file.list();
        for(String str : filestr){
            System.out.println(str);
        }*/
        File[] files = file.listFiles();
        for(File fs : files){
            System.out.println(fs);
        }

    若想只得到java类型的文件该怎么做呢?

    java中提供了一个过滤器的工具:

    过滤器;(对遍历行为进行删选)

    在File类中有两个和L istFiles重载的方法,方法的参数传递的就是过滤器

     

    1.File[] listFiles(FileFilter filter)

    java. io. FileFilter接口:用于抽象路径名(File对象)的过滤器。

    作用:用来过滤文件(File对象)

    抽象方法:用来过滤文件的方法 boolean accept(File pathname) 测试指定抽象路径名是否应该包含在某个路径名列表中。

    参数: File pathname:使用ListFiles方法遍历目录,得到的每一个文件对象

     

    2.File[] listFiles(FilenameFilter filter)

    *java. io. FilenameFilter接口**:实现此接口的类实例可用于过滤器文件名。

    作用:用于过滤文件名称

    抽象方法:用来过滤文件的方法 boolean accept(File dir, String name) 测试指定文件是否应该包含在某-文件列表中。

    参数: File dir:构造方法中传递的被遍历的目录

      String name :使用ListFiles方法遍历目录,获取的每一个文件/文件夹的名称 (可以先将两个参数封装为一个File对象)

    注意: 两个过滤器接口是没有实现类的,需要我们自己写实现类,重写过滤的方法accept,在方法中自己定义过滤的规则

    处理过程:

    1.对构造方法传递的目录进行遍历,获取目录中每一个文件/文件夹,将其封装为File对象

    2.调用参数传递的过滤器方法accept

    3.把遍历得到的每一个File对象,传递给accept方法的参数pathname

    accept方法返回一个布尔值

    true:把传递过来的File对象保存到File数组中

    false:不会把File对象保存到数组中

     

     

    创建一个过滤器接口的实现类并重写其中的accept方法

     

    import java.io.File;
    import java.io.FileFilter;
    
    public class FileFilterImpl implements FileFilter {
        @Override
        public boolean accept(File pathname) {
            if(pathname.isDirectory()){
                return true;
            }
            //如果是目录者继续遍历目录(递归调用)
            return pathname.getName().toLowerCase().endsWith(".java");
        }
    }
    public static void outjavafile(File file){
     if(file.isFile()){return;}
     //如果是文件,则直接结束方法
            File[] files = file.listFiles(new FileFilterImpl());
            for(File fs : files){
                if(fs.isDirectory()){
                    //如果是目录,递归调用,遍历内部文件
                    outjavafile(fs);
                }else {
                    System.out.println(fs);
                }
            }
        }
  • 相关阅读:
    JDK5.0新特性系列目录
    JDK5.0新特性系列11.5.2线程 同步装置之CountDownLatch
    JDK5.0新特性系列11.5.4线程 同步装置之Exchanger
    JDK5.0新特性系列11.5.1线程 同步装置之Semaphore
    Axure RP Pro 6.0 原型设计工具(产品经理必备)
    JDK5.0新特性系列11.4线程 Condition
    OLTP 和 OLAP 的区别
    JDK5.0新特性系列11.5.3线程 同步装置之CyclicBarrier
    电脑通过手机上网的设置
    (转)刚开始Outlook Addin的布署问题
  • 原文地址:https://www.cnblogs.com/susexuexi011/p/13934213.html
Copyright © 2011-2022 走看看