综合案例_文件搜索和FileFilter过滤器的原理和使用
文件搜索
需求 :
遍历D:\aaa文件夹,及 aaa 文件夹的子文件夹并且只要.java结尾的文件
分析:
1.目录搜索,无法判断多少级目录,所以使用递归,遍历所有目录
2.遍历目录时,获取的子文件,通过文件名称,判断是否符合条件
代码实现:
- public class Demo05Recurison {
- public static void main(String[] args) {
- File file = new File("D:\\aaa");
- getAllFile(file);
- }
- /*
- 定义一个方法,参数传递File类型的目录
- 方法中对目录进行遍历
- */
- public static void getAllFile(File dir){
- //System.out.println(dir);//打印被遍历的目录名称
- File[] files = dir.listFiles();
- for (File f : files) {
- //对遍历得到的File对象f进行判断,判断是否是文件夹
- if(f.isDirectory()){
- //f是一个文件夹,则继续遍历这个文件夹
- //我们发现getAllFile方法就是传递文件夹,遍历文件夹的方法
- //所以直接调用getAllFile方法即可:递归(自己调用自己)
- getAllFile(f);
- }else{
- //f是一个文件,直接打印即可
- /*
- D:\\aaa\\a.java
- 只要.java结尾的文件
- 1.把File对象f,转为字符串对象
- */
- //String name = f.getName();//a.java
- //String path = f.getPath();//D:\\aaa\\a.java
- //String s = f.toString();//D:\\aaa\\aaa.java
- //把字符串,转换为小写
- //s = s.toLowerCase();
- //2.调用String类中的方法endsWith判断字符串是否是以.java结尾
- //boolean b = s.endsWith(".java");
- //3.如果是以.java结尾的文件,则输出
- /*if(b){
- System.out.println(f);
- }*/
- // 是文件,判断文件名并输出文件绝对路径
- if(f.getName().toLowerCase().endsWith(".java")){
- System.out.println(f);
- }
- }
- }
- }
- }
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,在方法中自己定义过滤的规则
- public class Demo01Filter {
- public static void main(String[] args) {
- File file = new File("c:\\abc");
- getAllFile(file);
- }
- /*
- 定义一个方法,参数传递File类型的目录
- 方法中对目录进行遍历
- */
- public static void getAllFile(File dir){
- File[] files = dir.listFiles(new FileFilterImpl());//传递过滤器对象
- for (File f : files) {
- //对遍历得到的File对象f进行判断,判断是否是文件夹
- if(f.isDirectory()){
- //f是一个文件夹,则继续遍历这个文件夹
- //我们发现getAllFile方法就是传递文件夹,遍历文件夹的方法
- //所以直接调用getAllFile方法即可:递归(自己调用自己)
- getAllFile(f);
- }else{
- //f是一个文件,直接打印即可
- System.out.println(f);
- }
- }
- }
- }
- /*
- 创建过滤器FileFilter的实现类,重写过滤方法accept,定义过滤规则
- */
- public class FileFilterImpl implements FileFilter {
- @Override
- public boolean accept(File pathname) {
- /*
- 过滤的规则:
- 在accept方法中,判断File对象是否是以.java结尾
- 是就返回true
- 不是就返回false
- */
- //如果pathname是一个文件夹,返回true,继续遍历这个文件夹
- if(pathname.isDirectory()){
- return true;
- }
- return pathname.getName().toLowerCase().endsWith(".java");
- }
- }
综合案例_文件搜索和FileFilter过滤器的原理和使用的更多相关文章
- 阶段1 语言基础+高级_1-3-Java语言高级_06-File类与IO流_02 递归_5_综合案例_文件搜索
复制上一节课的代码 这三种方式都可以获取到文件的名称 把目录的打印注释掉 如果把文件的后缀改成大写的JAVA 再获取就获取不到了 文件名或者路径 转换为小写的字符串 链式编程
- 阶段1 语言基础+高级_1-3-Java语言高级_07-网络编程_第3节 综合案例_文件上传_5_综合案例_文件上传案例优化
自定义文件命名 文件名称被写死了 服务器上传了一张图片,服务器就停止了 把服务器端的代码放在while循环里面 服务器也不用 关闭了. 上传完成后服务器端没有关闭 再来启动客户端,又上传一张投片. 多 ...
- FileFilter过滤器的原理和使用和FileNameFilter过滤器的使用
FileFilter过滤器的原理和使用 package com.yang.Test.FileStudy; import java.io.File; /** * 在File类中有两个和ListFiles ...
- 第3章 Linux常用命令(3)_文件搜索命令
3. 文件搜索命令 3.1 文件搜索:find (1)find命令 命令名称 find 命令所在路径 /bin/find 执行权限 所有用户 语法 find [搜索范围] [-选项] [匹配条件] - ...
- linux 命令案例学习——文件搜索
两个搜索文件的工具 locate ——仅仅通过文件名查找文件 find ——依据文件的各种属性在既定目录(包括子目录)里查找 一个通常与文件搜索命令一起使用.处理搜索结果文件列表的命令 xa ...
- linux笔记_文件搜索命令
一.locate命令 locate命令属于mlocate包,如果执行locate filename提示命令未找到执行安装mlocate包 # yum -y install mlocate 安装后执行l ...
- EL&Filter&Listener:EL表达式和JSTL,Servlet规范中的过滤器,Servlet规范中的监听器,观察着设计模式,监听器的使用,综合案例学生管理系统
EL&Filter&Listener-授课 1 EL表达式和JSTL 1.1 EL表达式 1.1.1 EL表达式介绍 *** EL(Expression Language):表达式语言 ...
- gis空间分析案例_坐标文件高斯投影变换地理处理工具
gis空间分析案例_坐标文件投影变换地理处理工具 商务科技合作:向日葵,135—4855__4328,xiexiaokui#qq.com 功能: 对文件进行投影变换 特点: 1. 地理处理工具,可以与 ...
- Solr综合案例深入练习
1. 综合案例 1.1. 需求 使用Solr实现电商网站中商品信息搜索功能,可以根据关键字.分类.价格搜索商品信息,也可以根据价格进行排序,并且实现分页功能. 界面如下: 1.2. 分析 开发人员需要 ...
随机推荐
- C# 滑动验证码|拼图验证|SlideCaptcha
使用背景: 关于滑动验证码的使用场所还是非常多的,如: 调取短信接口之前,和 注册请求之前 或者 频繁会调用的接口 都需要加这个拼图验证.这里先上一下效果图吧(心中无码,自然高清). 话不多说,开撸! ...
- 基于Koa与umi实现服务端(SSR)渲染
工具: umijs:react前端应用框架. koa:基于 Node.js 平台的web 开发框架. 介绍: 本文主要是简单介绍,利用umi开发前端页面,打包成服务端渲染工程包.由Koa实现服务端渲染 ...
- 使用 Ansible 快速部署 HBase 集群
背景 出于数据安全的考虑,自研了一个低成本的时序数据存储系统,用于存储历史行情数据. 系统借鉴了 InfluxDB 的列存与压缩策略,并基于 HBase 实现了海量存储能力. 由于运维同事缺乏 Had ...
- 菜B的初来乍到。
1.简单自我介绍 031702220:我是默默无闻的黄恒杰:我的爱好是健身:我最喜欢紫荆园的青椒炒肉:薛之谦的<其实>:苦心人天不负,三千越甲可吞吴. 2.阅读与思考 (1)回想一下你初入 ...
- mybatis入门,CRUD,万能Map,模糊查询
第一个Mybatis程序 核心配置文件mybatis-config.xml <?xml version="1.0" encoding="UTF-8" ?& ...
- 微信H5页面唤醒APP并传参跳转uniapp
主要实现是利用微信内置浏览器支持的<wx-open-launch-app>开放标签可以让你的H5网页拉起APP 在链接https://developers.weixin.qq.com/ ...
- django小项目,使用paramiko自动备份网络设备配置
原来公司开发团队人员众多,有专门对接运维需求的开发人员,现在想要实现些功能可(只)以(能)自己写了-_- | 周末在家无事,用django搞个简单的功能练练手 django安装,配置 sudo p ...
- 好客租房12-JSX的注意点
1.4注意点 1React元素的属性名使用驼峰式命名法 2特殊属性名 class-className for->htmlFor 3没有子节点可以用单标签表示 4使用小括号包裹jsx const ...
- cut-列过滤
列过滤命令. 语法 cut [选项] 要过滤的字符串 选项 -f 以字段为单位进行分割 -c 以字符为单位进行分割 -b 以字节为单位进行分割 -d 以分割符为单位进行分割,分隔符可以是"冒 ...
- k8s的api资源
NAME SHORTNAMES APIGROUP NAMESPACED KIND 资源用途说明 bindings TRUE Binding 已弃用.用于记录一个object和另一个object ...