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

来源:互联网 发布:手机如何注册淘宝会员 编辑:程序博客网 时间:2024/06/05 08:25

简单获取目录列表:

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

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

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

Filepath = 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();

  }





1 0
原创粉丝点击