您的位置:首页 > 编程语言 > Java开发

JAVA学习代码——实现文件名的过滤

2016-09-13 14:46 204 查看
File 类有一个欺骗性的名字—— 通常会认为它对付的是一个文件,但实情并非如此。它既代表一个特定文件

的名字,也代表目录内一系列文件的名字。若代表一个文件集,便可用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;
}
}



                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: