package sn.demo02;
import java.io.File;
import java.io.FilenameFilter;
import java.util.Arrays;
import java.util.regex.Pattern;
/**(目录列表器)
* 该类用于测试file类
* 假设我们想查看一个目录列表,可以用两种方法使用File对象。如果我们调用不带参数的list方法,便可以获得此File对象包含的全部列表。然而,
* 如果我们想获取一个首先的list列表,例如,想得到所有扩展名为.java的文件,那么我们就要用到“目录过滤器”,这个类会告诉我们怎样显示
* 符合条件的File对象。
*
* @author zw
*
*/
public class FileDemo {
public static void main(String[] args) {
args = new String[]{"1","2","3"};
File path = new File(".");
String[] list ;
if(args.length == 0){
list = path.list();
}else{
System.out.println("list 开始调用我创建的类的回调方法。。。");
//浏览指定目录下所有的java文件
DirFilter dir = new DirFilter("*.java");
list = path.list(dir);
}
Arrays.sort(list,String.CASE_INSENSITIVE_ORDER);
for(String dirItem : list){
System.out.println(dirItem);
}
String str = "0123456789";
String str2 = str.substring(0, 3);
System.out.println(str2);
}
}
/**
* DirFilter存在的唯一原因就是将accept()方法。创建这个类的目的在于把accept()方法提供给list使用,
* 使list可以回调accept这个方法,进而决定那些文件包含在列表中。因此,这种结构也常常成为回调。更具体的说,
* 这是一个策略模式的例子,因为list实现了基本功能,而且按照filenameFilter的形式提供了这个策略,
* 以便完善list()在提供服务是所需的算法。因为list()接受filenameFilter对象作为参数,
* 这意味着我们可以传递实现了FilenameFilter接口的任何类的对象,用以选择(甚至在运行时)list()方法的行为方式。
* 策略的目的就是提供了代码行为的灵活性。accept()方法必须接受一个某个特定文件所在目录的File对象,
* 以及包含了那个文件名的一个String。记住一点,list方法会为此目录对象下的每个文件调用accept,来判断该文件是否包含在内;
* 判断结果又accept方法返回的布尔值表示。accept会使用一个正则表达式的matcher对象,
* 来查看此正则表达式regex是否匹配这个文件的名字。通过使用accept(),list方法会返回一个数组
* @author zw
*
*/
class DirFilter implements FilenameFilter{
// Pattern对象:
/*
* java.util.regex是一个用正则表达式所定制的模式来对字符串进行匹配工作的类库包。
* 它包括两个类:Pattern和Macher
* 一个Pattern是一个正则表达式经编译后的表现模式
* 一个Matcher对象是一个状态机器,,它依据Pattern对象做匹配模式对字符串进行匹配检查。
* 首先一个Pattern实例定制了一个所用语法与PERL类似的正则表达式经编译后的模式,然后一个
* Matcher实例在这个给定的Pattern实例模式下进行字符串的匹配工作。
* */
private Pattern pattern ;
public DirFilter(String regex){
//pattern对象是由正则表达式编译之后实现
pattern = Pattern.compile(regex);
}
@Override
public boolean accept(File dir, String name) {
return pattern.matcher(name).matches();
import java.io.File;
import java.io.FilenameFilter;
import java.util.Arrays;
import java.util.regex.Pattern;
/**(目录列表器)
* 该类用于测试file类
* 假设我们想查看一个目录列表,可以用两种方法使用File对象。如果我们调用不带参数的list方法,便可以获得此File对象包含的全部列表。然而,
* 如果我们想获取一个首先的list列表,例如,想得到所有扩展名为.java的文件,那么我们就要用到“目录过滤器”,这个类会告诉我们怎样显示
* 符合条件的File对象。
*
* @author zw
*
*/
public class FileDemo {
public static void main(String[] args) {
args = new String[]{"1","2","3"};
File path = new File(".");
String[] list ;
if(args.length == 0){
list = path.list();
}else{
System.out.println("list 开始调用我创建的类的回调方法。。。");
//浏览指定目录下所有的java文件
DirFilter dir = new DirFilter("*.java");
list = path.list(dir);
}
Arrays.sort(list,String.CASE_INSENSITIVE_ORDER);
for(String dirItem : list){
System.out.println(dirItem);
}
String str = "0123456789";
String str2 = str.substring(0, 3);
System.out.println(str2);
}
}
/**
* DirFilter存在的唯一原因就是将accept()方法。创建这个类的目的在于把accept()方法提供给list使用,
* 使list可以回调accept这个方法,进而决定那些文件包含在列表中。因此,这种结构也常常成为回调。更具体的说,
* 这是一个策略模式的例子,因为list实现了基本功能,而且按照filenameFilter的形式提供了这个策略,
* 以便完善list()在提供服务是所需的算法。因为list()接受filenameFilter对象作为参数,
* 这意味着我们可以传递实现了FilenameFilter接口的任何类的对象,用以选择(甚至在运行时)list()方法的行为方式。
* 策略的目的就是提供了代码行为的灵活性。accept()方法必须接受一个某个特定文件所在目录的File对象,
* 以及包含了那个文件名的一个String。记住一点,list方法会为此目录对象下的每个文件调用accept,来判断该文件是否包含在内;
* 判断结果又accept方法返回的布尔值表示。accept会使用一个正则表达式的matcher对象,
* 来查看此正则表达式regex是否匹配这个文件的名字。通过使用accept(),list方法会返回一个数组
* @author zw
*
*/
class DirFilter implements FilenameFilter{
// Pattern对象:
/*
* java.util.regex是一个用正则表达式所定制的模式来对字符串进行匹配工作的类库包。
* 它包括两个类:Pattern和Macher
* 一个Pattern是一个正则表达式经编译后的表现模式
* 一个Matcher对象是一个状态机器,,它依据Pattern对象做匹配模式对字符串进行匹配检查。
* 首先一个Pattern实例定制了一个所用语法与PERL类似的正则表达式经编译后的模式,然后一个
* Matcher实例在这个给定的Pattern实例模式下进行字符串的匹配工作。
* */
private Pattern pattern ;
public DirFilter(String regex){
//pattern对象是由正则表达式编译之后实现
pattern = Pattern.compile(regex);
}
@Override
public boolean accept(File dir, String name) {
return pattern.matcher(name).matches();
}
}