FilenameFilter来打印File下的所有java文件名
2008-11-25 21:42
393 查看
在main中给定一个目录,在其下寻找满足以java作为后缀的文件名,并输出。
import java.io.*;
import java.util.*;
public class DirList
{
public static void main(String[] args)
{
File path=new File("E://Test"); //指定目录
String[] lst;
lst=path.list(new DirFilter()); //重点,看下边的解释
Arrays.sort(lst);
for(int i=0;i<lst.length;i++)
System.out.println(lst[i]);
}
}
class DirFilter implements FilenameFilter
{
public boolean isJavaFile(String fn)
{
if(fn.toLowerCase().endsWith("java")) return true;
return false;
}
public DirFilter(){}
public boolean accept(File dir,String name)
{
return isJavaFile(name);
}
}
解释:
File的list方法参数引入了一个文件名过滤类FilenameFilter。
如果给定的filter为空,则该目录下的所有文件名都符合要求。否则,只有使得FilenameFilter.accept()方法返回true的文件名才算符合条件。
对于每一个指定目录下的文件名,自动都会传到FilenameFilter类的accept方法,以此判断是否满足过滤器条件,最后这些满足过滤器条件的文件名以string数组返回。
下边给出File.list()方法的源码,以便清楚这个机制是怎么执行的。
public String[] list(FilenameFilter filter) {
String names[] = list(); //list()是File.list(),用来获取File下一级的所有文件名
if ((names == null) || (filter == null)) {
return names;
}
ArrayList v = new ArrayList();
for (int i = 0 ; i < names.length ; i++) {
//在这里把filter的accept隐藏了,在用户看来就是自动执行的
if (filter.accept(this, names[i])) {
v.add(names[i]);
}
}
return (String[])(v.toArray(new String[0]));
}
import java.io.*;
import java.util.*;
public class DirList
{
public static void main(String[] args)
{
File path=new File("E://Test"); //指定目录
String[] lst;
lst=path.list(new DirFilter()); //重点,看下边的解释
Arrays.sort(lst);
for(int i=0;i<lst.length;i++)
System.out.println(lst[i]);
}
}
class DirFilter implements FilenameFilter
{
public boolean isJavaFile(String fn)
{
if(fn.toLowerCase().endsWith("java")) return true;
return false;
}
public DirFilter(){}
public boolean accept(File dir,String name)
{
return isJavaFile(name);
}
}
解释:
File的list方法参数引入了一个文件名过滤类FilenameFilter。
如果给定的filter为空,则该目录下的所有文件名都符合要求。否则,只有使得FilenameFilter.accept()方法返回true的文件名才算符合条件。
对于每一个指定目录下的文件名,自动都会传到FilenameFilter类的accept方法,以此判断是否满足过滤器条件,最后这些满足过滤器条件的文件名以string数组返回。
下边给出File.list()方法的源码,以便清楚这个机制是怎么执行的。
public String[] list(FilenameFilter filter) {
String names[] = list(); //list()是File.list(),用来获取File下一级的所有文件名
if ((names == null) || (filter == null)) {
return names;
}
ArrayList v = new ArrayList();
for (int i = 0 ; i < names.length ; i++) {
//在这里把filter的accept隐藏了,在用户看来就是自动执行的
if (filter.accept(this, names[i])) {
v.add(names[i]);
}
}
return (String[])(v.toArray(new String[0]));
}
相关文章推荐
- Java.io.FilenameFilter文件名过滤接口的使用。
- java.io.FilenameFilter文件名过滤器总结
- java基础之File对象中的FilenameFilter文件过滤以及递归列出指定文件夹路径下的所有文件和所有文件夹
- Java File类学习笔记1:运用FileNameFilter类,获得某一目录下所有指定扩展名的文件
- java基础知识回顾之javaIO类--File类应用:过滤器接口FilenameFilter和FileFilter
- java获取指定路径下的指定文件/java.io.File.listFiles(FilenameFilter filter)
- FilenameFilter文件名过滤器——列出指定类型文件实现
- java-I/O File类(2)-FilenameFilter()-输入输出流的大概介绍以及一个小例子
- Java I/O之用FilenameFilter实现根据文件扩展名删除文件
- 文件名过滤器FilenameFilter的用法
- java_递归遍历文件目录结构,打印所有的目录名和文件名
- FilenameFilter文件名过滤器——列出指定类型文件实现
- [原创]Java中使用File类的list方法获取一定数量的文件:FilenameFilter接口的特殊用法
- Java之FilenameFilter接口
- Java I/O之用FilenameFilter实现根据文件扩展名删除文件
- java核心编程之文件过滤类FileFilter和FilenameFilter
- java中Filefilter和Filenamefilter的区别
- Java IO 之 FileFilter与FilenameFilter
- Java File Name Sort Filter