java 过滤转义 java过滤器指定过滤文件_java 过滤转义


文件过滤器

文件过滤器介绍

文件过滤器介绍:

过滤,就是把不需要的东西去掉,保留需要的东西;

过滤器,就是能够实现过滤功能的工具;

文件过滤器,就是能够过滤文件的工具,可以根据指定规则滤掉不需要的文件和文件夹,留下需要的文件和文件夹;

在Java中,和文件过滤功能有关的主要有两个接口:FilenameFilter和FileFilter;

FileFilter:文件或文件夹对象过滤器。

FilenameFilter:文件名或文件夹的名称过滤器。

FileFilter接口


java 过滤转义 java过滤器指定过滤文件_java 获取文件所在的文件夹_02


需求:使用过滤器获取一个文件夹里面的所有子文件夹;


java 过滤转义 java过滤器指定过滤文件_java 过滤转义_03


java 过滤转义 java过滤器指定过滤文件_数据_04


FilenameFilter接口


java 过滤转义 java过滤器指定过滤文件_数据_05


需求:获取指定文件夹中的所有Java文件;


java 过滤转义 java过滤器指定过滤文件_java 过滤转义_06


抽取通用过滤器,从文件夹中过滤需要后缀的文件:


/**


java 过滤转义 java过滤器指定过滤文件_java 过滤转义_07

https://www.zhihu.com/video/1072878736957005824


java 过滤转义 java过滤器指定过滤文件_java 过滤转义_08


递归

需求:输出指定文件夹及其子文件夹中的所有java文件;

思考:

1、根据题目要求,需要首先列举指定文件夹,得到里面所有的子文件夹和.java为后缀的子文件;

2、然后遍历第一步中得到的所有文件夹和文件,判断是文件还是文件夹;如果是文件,一定都是Java文件,可以直接输出;

如果是文件夹,就是子文件夹,需要拿子文件夹作为指定文件,通过过滤器列举里面所有子文件夹和以.java为后缀的子文件;


不断重复上面两个步骤


java 过滤转义 java过滤器指定过滤文件_java 过滤转义_09


递归简介

递归,就是函数直接或间接的调用自身;

直接递归:自函数中直接调用自身;


public


间接递归:多个函数之间相互调用,形成闭环调用;如,A函数调用B函数,B函数调用C函数,……最后一个函数又调用A函数;


java 过滤转义 java过滤器指定过滤文件_数据_10


从前有座山,山上有座庙,庙里有个老和尚给小和尚讲故事:

从前有座山,山上有座庙,庙里有个老和尚给小和尚讲故事:

从前有座山,山上有座庙,庙里有个老和尚给小和尚讲故事:

递归简单应用

练习:求5的阶乘;

n的阶乘:n*(n-1)*(n-2)……*1;


java 过滤转义 java过滤器指定过滤文件_java 获取文件所在的文件夹_11


递归的内存原理


java 过滤转义 java过滤器指定过滤文件_ide_12


递归的注意事项

  1. 使用递归,必须有一个终止条件
  2. 递归次数不能太多

有时即使设置了递归终止条件,但如果递归次数太多,仍然会出现栈内存溢出的问题:

总结:使用递归时必须注意两点:

  1. 递归要有结束条件;
  2. 递归的次数不能过多;

递归练习

需求:传说有一个农场,养了一对兔子,兔子从第三个月开始每个月都会生下一对小兔子;

每对小兔子长到第三个月,都会再生一对小兔子;

假设兔子都不会死;

问:第n个月,农场有多少对兔子?

这个问题实际上就是求斐波拉契数列第n项的值的问题;

  1. 1 2 3 5 8 13 21 34……

规律是:

  1. 第二项都是1,;从第三项开始,每一项都是前面两项的和;

f(n) = f(n-1) + f(n-2)


java 过滤转义 java过滤器指定过滤文件_java 过滤转义_13


java 过滤转义 java过滤器指定过滤文件_java 过滤转义_14


需求:删除指定文件夹;

思考:因为如果文件夹中有内容,不能直接删除,必须先删除文件夹里面的内容,然后才能删除这个变成空文件夹的文件夹;

步骤:

  1. 列举目标文件夹,获取文件夹中所有子文件和子文件夹;
  2. 遍历处理这些子文件和子文件夹:
  1. 如果是子文件,就直接删除;
  2. 如果是文件夹,就递归调用自身,将这个子文件夹作为新的目标文件夹处理
public


java 过滤转义 java过滤器指定过滤文件_ide_15

https://www.zhihu.com/video/1072879306694242304



今日小结:

IO介绍:

IO:input和output的缩写;input,表示将数据读进内存;output,表示将数据写出内存;

IO技术:用来实现程序内存和其它地方之间进行数据交换的技术;

数据持久化:将数据从内存中输出到持久化设备上(如硬盘、光盘等),使其能够长久的保存;

File类

在Java中,使用File类描述文件和文件夹;只要操作文件或者文件夹,都应该找File类;

File类只能操作文件,不能操作文件中的数据;要操作里面的数据,需要使用IO流;

一个File类的对象表示硬盘上的一个文件或文件夹对象(不一定真实存在);

File类的功能主要可分为

构造方法:

File(String pathname):根据一个路径得到File对象

File(String parent, String child):根据一个目录和一个子文件/目录得到File对象

File(File parent, String child):根据一个父File对象和一个子文件/目录得到File对象

创建功能:

public boolean createNewFile():创建文件 如果存在这样的文件,就不创建了

public boolean mkdir():创建文件夹 如果存在这样的文件夹,就不创建了

public boolean mkdirs():创建文件夹,如果父文件夹不存在,会帮你创建出来

获取方法:

public String getAbsolutePath(): 获取绝对路径

public String getPath(): 获取相对路径

public String getName(): 获取名称

public long lastModified(): 获取最后一次的修改时间,毫秒值

判断方法:

public boolean isDirectory(): 判断是否是目录

public boolean isFile(): 判断是否是文件

public boolean exists(): 判断是否存在

修改方法:

public boolean renameTo(File dest):重新命名此抽象路径名表示的文件

public boolean setLastModified(long time):设置此抽象路径名指定的文件或目录的最后一次修改时间。

删除方法:

public boolean delete():删除文件或者文件夹

列举方法:

public String[] list(): 获取指定目录下的所有文件或者文件夹的名称数组

public File[] listFiles(): 获取指定目录下的所有文件或者文件夹的File数组

public static File[] listRoots(): 获取系统中所有磁盘的根目录;

文件过滤器

用来在列举文件夹中的子文件和子文件夹时,根据指定规则过滤掉不需要的,保留符合规则的文件;

表示文件过滤器的接口有两个:

FilenameFilter:

过滤方法:如果儿子的对象能在父目录中存在,就返回true,否则false

boolean aceept(File dir, String name){

//dir:父目录

//name:儿子的名称

}

FileFilter:

过滤方法:如果参数表示的File对象能保留,就返回true,否则false

boolean aceept(File pathname){

// pathname : 要过滤的File对象

递归

一个函数直接或间接的调用自身,称为递归;

使用递归需要注意:

  1. 递归必须有一个终止条件,否则就是递归无法结束,会出现栈内存溢出;
  2. 递归的次数不能太多,否则递归一样栈内存溢出;