java思想IO--目录列表器带有简单过滤

    xiaoxiao2021-04-14  56

    简单获取目录列表:

    /* new File(".");  "." 表示从项目所在目录下开始查找   "src" 从项目目录下的src文件夹中查找下一级文件

    如果"src" 不存在路径则报错 Exception in thread "main" java.lang.NullPointerException

    此方法仅能查找当前目录下的文件或者其子文件 不能更深一层 */

    File path = new File(".");

    list = path.list();

    目录列表器带有简单过滤:

    过滤功能:将不符合后缀的,或者文件内容不包含指定字符串的文件过滤

    public static void main(String[] arg) {

    File path = new File(".");

    String[] list;

    /*第一个字符串设置 文件后缀  第二个字符串设置包含的字符串 最后输出符合的文件*/

    String[] args = {".txt","src"};

            /*如果没有条件,则将所有结果赋值给list  简单获取列表*/

    if (args.length == 0) {

    list = path.list();

    }else {

     /*                          list(FilenameFilter filter)   返回一个字符串数组,这些字符串指定此抽象路径名表示的目录 中满足指定过滤器的文件和目录。 */

    list = path.list(  new FilenameFilter() {

                    /*对匿名filenameFilter 进行重写方法*/

                    /*获取匹配条件*/

    private String ext = args[0].toLowerCase();

    @Override

    public boolean accept(File dir, String name) {

                       /*匹配以规定条件结尾的文件或者目录*/

    if (name.toLowerCase().endsWith(ext)) {

    /*获取set集合 特性:不重复*/

    Set<String> words = new HashSet<String>(

             /*    \W+  匹配任何非单词字符一次或者多次。等价于[^A-Za-z0-9_]+”

              用于TextFilesplit() */

    /*匿名函数*/  new TextFile(new File(

    dir,name).getAbsolutePath(), "\\W+"));

    if (words.contains(args[1]))

    return true;

    }

    return false;

    }

    });

    }

    Arrays.sort(list,String.CASE_INSENSITIVE_ORDER);

    for (String dirItem : list) {

    System.out.println(dirItem);

    }

    }

    Filelist方法源码:

     public String[] list(FilenameFilter filter) {

            String names[] = list();

            if ((names == null) || (filter == null)) {

                return names;

            }

            List<String> v = new ArrayList<>();

            for (int i = 0 ; i < names.length ; i++) {

                if (filter.accept(this, names[i])) {

                    v.add(names[i]);

                }

            }

            return v.toArray(new String[v.size()]);

    }

    TextFile源码:

    public TextFile(String fileName, String splitter) {

             /*调用的是父类ArrayList的有参构造*    */

    super(Arrays.asList(read(fileName).split(splitter)));

         /*如果 集合的元素0位空 则删除元素*/

        if(get(0).equals("")) remove(0);

      }

    TextFile read方法源码:

    public static String read(String fileName) {

        StringBuilder sb = new StringBuilder();

        try {

          BufferedReader in= new BufferedReader(new FileReader(

            new File(fileName).getAbsoluteFile()));

          try {

            String s;

            while((s = in.readLine()) != null) {

              sb.append(s);

              sb.append("\n");

            }

          } finally {

            in.close();

          }

        } catch(IOException e) {

          throw new RuntimeException(e);

        }

        return sb.toString();

      }

    转载请注明原文地址: https://ju.6miu.com/read-670625.html

    最新回复(0)