JAVA学习代码——实现文件名的过滤
2016-09-13 14:46
204 查看
File 类有一个欺骗性的名字—— 通常会认为它对付的是一个文件,但实情并非如此。它既代表一个特定文件
的名字,也代表目录内一系列文件的名字。若代表一个文件集,便可用list()方法查询这个集,返回的是一
个字串数组。之所以要返回一个数组,而非某个灵活的集合类,是因为元素的数量是固定的。而且若想得到
一个不同的目录列表,只需创建一个不同的 File 对象即可。事实上,“ FilePath”(文件路径)似乎是一个
更好的名字。本节将向大家完整地例示如何使用这个类,其中包括相关的 FilenameFilter(文件名过滤器)
接口。
的名字,也代表目录内一系列文件的名字。若代表一个文件集,便可用list()方法查询这个集,返回的是一
个字串数组。之所以要返回一个数组,而非某个灵活的集合类,是因为元素的数量是固定的。而且若想得到
一个不同的目录列表,只需创建一个不同的 File 对象即可。事实上,“ FilePath”(文件路径)似乎是一个
更好的名字。本节将向大家完整地例示如何使用这个类,其中包括相关的 FilenameFilter(文件名过滤器)
接口。
package foo; import java.io.File; import java.io.FilenameFilter; /** * DirFilter 类:实现对目录下的过滤,s为过滤字符串 或者创建匿名内部类来实现过滤 或者将匿名内部类定义成 list()的一个参数,使其显得更加精简 */ public class DirList { // 创建静态方法 // 注意 filter()的自变量必须是 final。这一点是匿名内部类要求的,使其能使用来自本身作用域以外一个对象。 // public static FilenameFilter filter(final String afn) { // // 创建匿名内部类 // return new FilenameFilter() { // String fn = afn; // // public boolean accept(File dir, String n) { // String f = new File(n).getName(); // return f.indexOf(fn) != -1; // } // }; // 内部类结束 // } public static void main(String[] args) { try { String s = "src";// 过滤字符串,有的输出 File path = new File(".");// 文件路径(当前路径) String[] list;// 数组list用来存储目录名称 // 若File代表一个文件集,便可用list()方法查询这个集,返回的是一个字串数组。 // 之所以要返回一个数组,而非某个灵活的集合类,是因为元素的数量是固定的 list自动调用 list = path.list(new DirFilter(s));// 调用查询方法 // 将匿名内部类作为list()的参数 // list = path.list( // new FilenameFilter() { // public boolean // accept(File dir, String n) { // String f = new File(n).getName(); // return f.indexOf(args[0]) != -1; // } // }); // 输出list数组 for (int i = 0; i < list.length; i++) { System.out.println("<><>" + list[i]); } } catch (Exception e) { e.printStackTrace(); } } } /* * DirFilter 类“实现”了 interface FilenameFilter,它指出这种类型的所有对象都提供了一个名为 accept()的方法 把 * accept()方法提供给 list()方法,使 list()能够“回调” accept() ,从而判断应将哪些文件名包括到列表中。 由于 * list()采用一个 FilenameFilter 对象作为自己的自变量使用,所以我们能传递实现了 FilenameFilter 的任何 * 类的一个对象,用它决定(甚至在运行期) list()方法的行为方式。回调的目的是在代码的行为上提供更大的灵活性。accept()方 法必须接纳一个 * File 对象,用它指示用于寻找一个特定文件的目录;并接纳一个 String,其中包含了要寻找之文件的名字。可决定 * 使用或忽略这两个参数之一,但有时至少要使用文件名。记住list()方法准备为目录对象中的每个文件名调用 accept(),核实哪个 应包含在内—— 具体由 * accept()返回的“布尔”结果决定。 */ class DirFilter implements FilenameFilter { String afn; // 传入过滤字符串 DirFilter(String afn) { this.afn = afn; } public boolean accept(File dir, String name) { // dir为path的路径即".",name为当前查询到的文件名称 // System.out.println("dir" + dir + "name" + name); // 过滤文件信息: // 为确定我们操作的只是文件名,其中没有包含路径信息,必须采用String 对象,并在它的外部创建一个 // File 对象。然后调用 getName(),它的作用是去除所有路径信息 String f = new File(name).getName();// f为查询到的名称 // 若名称包含afn,返回true,否则返回false return f.indexOf(afn) != -1; } }
相关文章推荐
- Java入门学习:实现日志方法(记录代码文件名,类名,方法名,行号)
- Java实现文件名过滤
- 一致性哈希算法学习及JAVA代码实现分析
- JAVA菜鸟学习日记——简单代码实现IOC控制反转
- 一致性哈希算法学习及JAVA代码实现分析
- 策略模式的学习(转载的,我增加了Java代码实现)
- 【代码笔记】Java深入学习——实现客户端发送文件到服务器的文件传输
- 经典内部排序算法学习总结(算法思想、可视化、Java代码实现、改进、复杂度分析、稳定性分析)
- java基础学习总结——关于Java中事件分发和监听机制实现的代码实例
- 【Java数据结构学习笔记之一】线性表的存储结构及其代码实现
- Android(java)学习笔记66:线程的实现方案2思路以及代码实现
- java实现文件过滤的示例代码
- Android(java)学习笔记229:服务(service)之绑定服务调用服务里面的方法 (采用接口隐藏代码内部实现)
- ItemCF_基于物品的协同过滤_MapReduceJava代码实现思路
- Redis学习之java代码实现(Jedis)
- Android学习第四课:Java代码实现XML布局
- java jvm学习笔记八(实现jar包的代码签名)
- [学习笔记]EXCEL导入功能java代码实现
- Java实现敏感词过滤代码
- 【Java学习之旅】——Java如何实现像c#的#region实现代码折叠