文件搜索

需求 :

  遍历D:\aaa文件夹,及 aaa 文件夹的子文件夹并且只要.java结尾的文件

分析:

  1.目录搜索,无法判断多少级目录,所以使用递归,遍历所有目录

  2.遍历目录时,获取的子文件,通过文件名称,判断是否符合条件

代码实现:

  1. public class Demo05Recurison {
  2. public static void main(String[] args) {
  3. File file = new File("D:\\aaa");
  4. getAllFile(file);
  5. }
  6.  
  7. /*
  8. 定义一个方法,参数传递File类型的目录
  9. 方法中对目录进行遍历
  10. */
  11. public static void getAllFile(File dir){
  12. //System.out.println(dir);//打印被遍历的目录名称
  13. File[] files = dir.listFiles();
  14. for (File f : files) {
  15. //对遍历得到的File对象f进行判断,判断是否是文件夹
  16. if(f.isDirectory()){
  17. //f是一个文件夹,则继续遍历这个文件夹
  18. //我们发现getAllFile方法就是传递文件夹,遍历文件夹的方法
  19. //所以直接调用getAllFile方法即可:递归(自己调用自己)
  20. getAllFile(f);
  21. }else{
  22. //f是一个文件,直接打印即可
  23. /*
  24. D:\\aaa\\a.java
  25. 只要.java结尾的文件
  26. 1.把File对象f,转为字符串对象
  27. */
  28. //String name = f.getName();//a.java
  29. //String path = f.getPath();//D:\\aaa\\a.java
  30. //String s = f.toString();//D:\\aaa\\aaa.java
  31.  
  32. //把字符串,转换为小写
  33. //s = s.toLowerCase();
  34.  
  35. //2.调用String类中的方法endsWith判断字符串是否是以.java结尾
  36. //boolean b = s.endsWith(".java");
  37.  
  38. //3.如果是以.java结尾的文件,则输出
  39. /*if(b){
  40. System.out.println(f);
  41. }*/
  42.  
  43. // 是文件,判断文件名并输出文件绝对路径
  44. if(f.getName().toLowerCase().endsWith(".java")){
  45. System.out.println(f);
  46. }
  47. }
  48. }
  49. }
  50. }

FileFilter过滤器的原理和使用

需求:
  遍历c:\\abc文件夹,及abc文件夹的子文件夹
  只要.java结尾的文件
  c:\\abc
  c:\\abc\\abc.txt
  c:\\abc\\abc.java
  c:\\abc\\a
  c:\\abc\\a\\a.jpg
  c:\\abc\\a\\a.java
  c:\\abc\\b
  c:\\abc\\b\\b.java
  c:\\abc\\b\\b.txt
我们可以使用过滤器来实现
在File类中有两个和ListFiles重载的方法,方法的参数传递的就是过滤器
File[] listFiles(FileFilter filter)
java.io.FileFilter接口:用于抽象路径名(File对象)的过滤器。
  作用:用来过滤文件(File对象)
  抽象方法:用来过滤文件的方法
    boolean accept(File pathname) 测试指定抽象路径名是否应该包含在某个路径名列表中。
    参数:
      File pathname:使用ListFiles方法遍历目录,得到的每一个文件对象
File[] listFiles(FilenameFilter filter)
java.io.FilenameFilter接口:实现此接口的类实例可用于过滤器文件名。
  作用:用于过滤文件名称
  抽象方法:用来过滤文件的方法
    boolean accept(File dir, String name) 测试指定文件是否应该包含在某一文件列表中。
    参数:
      File dir:构造方法中传递的被遍历的目录
      String name:使用ListFiles方法遍历目录,获取的每一个文件/文件夹的名称
注意:
  两个过滤器接口是没有实现类的,需要我们自己写实现类,重写过滤的方法accept,在方法中自己定义过滤的规则

  1. public class Demo01Filter {
  2. public static void main(String[] args) {
  3. File file = new File("c:\\abc");
  4. getAllFile(file);
  5. }
  6.  
  7. /*
  8. 定义一个方法,参数传递File类型的目录
  9. 方法中对目录进行遍历
  10. */
  11. public static void getAllFile(File dir){
  12. File[] files = dir.listFiles(new FileFilterImpl());//传递过滤器对象
  13. for (File f : files) {
  14. //对遍历得到的File对象f进行判断,判断是否是文件夹
  15. if(f.isDirectory()){
  16. //f是一个文件夹,则继续遍历这个文件夹
  17. //我们发现getAllFile方法就是传递文件夹,遍历文件夹的方法
  18. //所以直接调用getAllFile方法即可:递归(自己调用自己)
  19. getAllFile(f);
  20. }else{
  21. //f是一个文件,直接打印即可
  22. System.out.println(f);
  23. }
  24. }
  25. }
  26. }
  1. /*
  2. 创建过滤器FileFilter的实现类,重写过滤方法accept,定义过滤规则
  3. */
  4. public class FileFilterImpl implements FileFilter {
  5. @Override
  6. public boolean accept(File pathname) {
  7. /*
  8. 过滤的规则:
  9. 在accept方法中,判断File对象是否是以.java结尾
  10. 是就返回true
  11. 不是就返回false
  12. */
  13. //如果pathname是一个文件夹,返回true,继续遍历这个文件夹
  14. if(pathname.isDirectory()){
  15. return true;
  16. }
  17.  
  18. return pathname.getName().toLowerCase().endsWith(".java");
  19. }
  20. }

综合案例_文件搜索和FileFilter过滤器的原理和使用的更多相关文章

  1. 阶段1 语言基础+高级_1-3-Java语言高级_06-File类与IO流_02 递归_5_综合案例_文件搜索

    复制上一节课的代码 这三种方式都可以获取到文件的名称 把目录的打印注释掉 如果把文件的后缀改成大写的JAVA 再获取就获取不到了 文件名或者路径 转换为小写的字符串 链式编程

  2. 阶段1 语言基础+高级_1-3-Java语言高级_07-网络编程_第3节 综合案例_文件上传_5_综合案例_文件上传案例优化

    自定义文件命名 文件名称被写死了 服务器上传了一张图片,服务器就停止了 把服务器端的代码放在while循环里面 服务器也不用 关闭了. 上传完成后服务器端没有关闭 再来启动客户端,又上传一张投片. 多 ...

  3. FileFilter过滤器的原理和使用和FileNameFilter过滤器的使用

    FileFilter过滤器的原理和使用 package com.yang.Test.FileStudy; import java.io.File; /** * 在File类中有两个和ListFiles ...

  4. 第3章 Linux常用命令(3)_文件搜索命令

    3. 文件搜索命令 3.1 文件搜索:find (1)find命令 命令名称 find 命令所在路径 /bin/find 执行权限 所有用户 语法 find [搜索范围] [-选项] [匹配条件] - ...

  5. linux 命令案例学习——文件搜索

    两个搜索文件的工具 locate  ——仅仅通过文件名查找文件 find     ——依据文件的各种属性在既定目录(包括子目录)里查找 一个通常与文件搜索命令一起使用.处理搜索结果文件列表的命令 xa ...

  6. linux笔记_文件搜索命令

    一.locate命令 locate命令属于mlocate包,如果执行locate filename提示命令未找到执行安装mlocate包 # yum -y install mlocate 安装后执行l ...

  7. EL&Filter&Listener:EL表达式和JSTL,Servlet规范中的过滤器,Servlet规范中的监听器,观察着设计模式,监听器的使用,综合案例学生管理系统

    EL&Filter&Listener-授课 1 EL表达式和JSTL 1.1 EL表达式 1.1.1 EL表达式介绍 *** EL(Expression Language):表达式语言 ...

  8. gis空间分析案例_坐标文件高斯投影变换地理处理工具

    gis空间分析案例_坐标文件投影变换地理处理工具 商务科技合作:向日葵,135—4855__4328,xiexiaokui#qq.com 功能: 对文件进行投影变换 特点: 1. 地理处理工具,可以与 ...

  9. Solr综合案例深入练习

    1. 综合案例 1.1. 需求 使用Solr实现电商网站中商品信息搜索功能,可以根据关键字.分类.价格搜索商品信息,也可以根据价格进行排序,并且实现分页功能. 界面如下: 1.2. 分析 开发人员需要 ...

随机推荐

  1. C# 滑动验证码|拼图验证|SlideCaptcha

    使用背景: 关于滑动验证码的使用场所还是非常多的,如: 调取短信接口之前,和 注册请求之前 或者 频繁会调用的接口 都需要加这个拼图验证.这里先上一下效果图吧(心中无码,自然高清). 话不多说,开撸! ...

  2. 基于Koa与umi实现服务端(SSR)渲染

    工具: umijs:react前端应用框架. koa:基于 Node.js 平台的web 开发框架. 介绍: 本文主要是简单介绍,利用umi开发前端页面,打包成服务端渲染工程包.由Koa实现服务端渲染 ...

  3. 使用 Ansible 快速部署 HBase 集群

    背景 出于数据安全的考虑,自研了一个低成本的时序数据存储系统,用于存储历史行情数据. 系统借鉴了 InfluxDB 的列存与压缩策略,并基于 HBase 实现了海量存储能力. 由于运维同事缺乏 Had ...

  4. 菜B的初来乍到。

    1.简单自我介绍 031702220:我是默默无闻的黄恒杰:我的爱好是健身:我最喜欢紫荆园的青椒炒肉:薛之谦的<其实>:苦心人天不负,三千越甲可吞吴. 2.阅读与思考 (1)回想一下你初入 ...

  5. mybatis入门,CRUD,万能Map,模糊查询

    第一个Mybatis程序 核心配置文件mybatis-config.xml <?xml version="1.0" encoding="UTF-8" ?& ...

  6. 微信H5页面唤醒APP并传参跳转uniapp

    主要实现是利用微信内置浏览器支持的<wx-open-launch-app>开放标签可以让你的H5网页拉起APP   在链接https://developers.weixin.qq.com/ ...

  7. django小项目,使用paramiko自动备份网络设备配置

    原来公司开发团队人员众多,有专门对接运维需求的开发人员,现在想要实现些功能可(只)以(能)自己写了-_- |   周末在家无事,用django搞个简单的功能练练手 django安装,配置 sudo p ...

  8. 好客租房12-JSX的注意点

    1.4注意点 1React元素的属性名使用驼峰式命名法 2特殊属性名 class-className for->htmlFor 3没有子节点可以用单标签表示 4使用小括号包裹jsx const ...

  9. cut-列过滤

    列过滤命令. 语法 cut [选项] 要过滤的字符串 选项 -f 以字段为单位进行分割 -c 以字符为单位进行分割 -b 以字节为单位进行分割 -d 以分割符为单位进行分割,分隔符可以是"冒 ...

  10. k8s的api资源

    NAME SHORTNAMES APIGROUP NAMESPACED KIND 资源用途说明 bindings     TRUE Binding 已弃用.用于记录一个object和另一个object ...