一、文件的过滤
文件的过滤就是获得当前目录下的某一个子目录或子文件。方法有以下三种:
1、if判断过滤法
思路:(1)将目录放在一个数组中(File.listFiles)
(2)对元素进行遍历(增强for循环)
(3)判断筛选(if判断)。
public static void main(String[] args) throws Exception {
// 创建一个File对象,明确它的地址
File f = new File("d:\\");
// 将地址中的子目录和子文件存放在一个数组中(绝对路径)
File[] arr = f.listFiles();
// 遍历元素
for (File name : arr) {
// 判断
if (name.getName().endsWith(".java")) {
System.out.println(name.getName());
}
}
}
2、listFiles(FilenameFilter filter) 实现接口的方法
思路:(1)定义一个过滤器
(2)
第一步:定义一个过滤器 ,实现FilenameFilter接口
public class FilenameFilterDemo implements FilenameFilter {
// 对FilenameFilter接口进行重写
public boolean accept(File dir, String name) {
return name.endsWith(".java");
}
}
实例化对象
public static void main(String[] args) {
// 创建一个File对象
File f=new File("d:\\");
// listFiles存储当前文件和目录的路径,
// f.listFiles将所得到的路径传递给new对象
// 为什么不用调用方法呢?listFiles底层源码传递了一个过滤的接口,调
// 用了FilenameFilter接口里面的accept方法
File [] arr=f.listFiles(new FilenameFilterDemo());
// 遍历元素
for(File name:arr) {
System.out.println(name.getName());
}
}
3、优化方法二
如果我们需要多次过滤某个文件就要在源码中进行多次修改return中的返回值,这样会引起许多麻烦。因此要对第二种方法进行改进。我们可以在实例化对象中传递参数。
// 文件的过滤源文件
public class FilenameFilterSuffx implements FilenameFilter {
// 指定过滤后缀名的名称suffx
private String suffx;
// 构造方法
FilenameFilterSuffx(String suffx){
this.suffx=suffx;
}
@Override
public boolean accept(File dir, String name) {
return name.endsWith(suffx);
}
}
实例化对象
public static void main(String[] args) {
// 创建一个File对象
File f=new File("d:\\");
// 把这些目录和文件夹放在一个数组中,并将想要过滤的文件后缀名传递给过滤器源文件
File [] arr=f.listFiles(new FilenameFilterSuffx(".java"));
// 对数组进行遍历
for(File file:arr) {
System.out.println(file.getName());
}
}
}
补充:二。文件夹的过滤
去除当前路径下所有文件夹形式的目录。
public class DirFilefilter implements FileFilter {
@Override
public boolean accept(File pathname) {
return pathname.isDirectory();
}
}
实例化对象
public class DirFilefilterDemo {
public static void main(String[] args) {
// 创建一个File对象
File f=new File("d:\\");
// 把文件和目录放在一个File数组中
File [] arr=f.listFiles(new DirFilefilter());
for(File file:arr) {
System.out.println(file);
}
}
}