文件过滤器(难)
文件过滤器介绍
过滤器:它就是把不需要的过滤出去,留下需要的内容。
文件或文件夹过滤器:过滤掉不需要的文件或文件夹,留下需要的文件或文件夹。
有种需求可以考虑使用过滤器:
假设在一个父目录文件夹下有成千上万个文件或者文件夹,而后缀名为.jpg的文件只有几个,我想把后缀名为.jpg的文件找出来,其实使用我们刚才讲解的list()和listFiles()函数可以解决,但是比较麻烦,主要是麻烦在某个类中或者某个项目中写完之后想要在其他项目使用,还得书写,也就是可移植性不是太好,那么我们是否可以想出一个可移植性好的办法呢,写完一次,其他地方可以再用,提高效率简化代码开发。
答案是可以的,过滤器就可以实现。
FileFileter介绍
FileFilter:它是一个过滤器,专门用来过滤文件或文件夹的。
File类中的函数:
File[] listFiles(FileFilter filter) 返回符合过滤器条件的所有儿子的File数组
FileFilter过滤器中的accept方法中的pathname是当前需要过滤的那个文件或文件夹对象。
或者可以这么理解pathname:就是某个儿子的File对象。
需求:判断D:\test下是否有.jpg文件,如果有,则打印其绝对路径。
分析和步骤:
1)创建测试类FileFilterDemo;
2)在FileFilterDemo类中main函数中创建父目录File类的对象list,"D:\test"作为函数的参数;
3)使用对象parent调用listFiles()函数获取所有符合条件的儿子的File数组files,自定义过滤器类的对象new MyFileFilter()作为参数;
4)循环遍历数组files,获取每个儿子file;
5)使用file对象调用getAbsolutePath()函数获得D:\test文件夹下含有文件.jpg的绝对路径,输出并打印;
过滤器类代码实现:
说明:对FileFilter接口中的accept函数进行进一步说明:
这个方法中定义过滤条件,当我们调用listFiles方法的时候,会把每个儿子都拿来调用accept方法:
如果这个方法返回true,那么这个儿子会被添加到最终的数组中
如果这个方法返回false,那么这个儿子就不会被添加到最终的数组
### IO流
概述
回想之前写过的程序,数据都是在内存中,一旦程序运行结束,这些数据都没有了,等下次再想使用这些数据,可是已经没有了。那怎么办呢?能不能把运算完的数据都保存下来,下次程序启动的时候,再把这些数据读出来继续使用呢?其实要把数据持久化存储,就需要把内存中的数据存储到内存以外的其他持久化设备(硬盘、光盘、U盘等 ROM)上。
当需要把内存中的数据存储到持久化设备上这个动作称为输出(写)Output操作。
当把持久设备上的数据读取到内存中的这个动作称为输入(读)Input操作。
因此我们把这种输入和输出动作称为IO操作。
1)创建一个过滤器类MyFileFilter 并实现FileFilter接口,然后复写接口中的accept()函数;
2)在accept函数定义过滤条件来判断每个儿子是否符合要求,符合就返回true,否则返回false;
3)使用File类的对象pathname调用getName()然后调用String类中的endsWith()函数判断文件名的后缀名是否是.jpg;
4)使用File类的对象pathname函数调用isFile()判断是否是文件;
5)使用return关键字将上述两个布尔类型的值返回;