listFile()方法和文件过滤器

listFile()方法介绍

一个目录中可能有多个文件或者文件夹,这个方法就是获取一个目录下的文件和文件夹(所有的)。

public class FileMethodDemo3 {
	public static void main(String[] args) {
		File dir = new File("e:\\java_code");
		//获取的是目录下的当前的文件以及文件夹的名称。
		String[] names = dir.list();
		for(String name : names){
			System.out.println(name);
		}
		//获取目录下当前文件以及文件对象,只要拿到了文件对象,那么就可以获取其中想要的信息
		File[] files = dir.listFiles();
		for(File file : files){
			System.out.println(file);
		}
	}
}

要注意的是:

  1. 获取制定的目录必须存在
  2. 制定的必须是目录,否则会容易出现异常

文件过滤器

我们获取目录中的所有文件显得有点繁琐,我们想要获取我们想要的文件,Java有解决这个问题的功能
File类中重载的listFile方法,可以接受制定的文件过滤器

public class FileDemo2 {
	public static void main(String[] args) {
		//获取扩展名为.java所有文件
		//创建File对象
		File file = new File("E:\\JavaSE1115\\code\\day11_code");
		//获取指定扩展名的文件,由于要对所有文件进行扩展名筛选,因此调用方法需要传递过滤器
		File[] files = file.listFiles(new FileFilterBySuffix());
		//遍历获取到的所有符合条件的文
		for (File f : files) {
			System.out.println(f);
		}
	}
}
//定义类实现文件名称 FilenameFilter 过滤器
class FileFilterBySuffix implements FilenameFilter{
	public boolean accept(File dir, String name) {
		return name.endsWith(".java");
	}
}

当我们想要自己选择过滤出来的文件类型,所以我们要改造一下过滤器

public class FileDemo2 {
	public static void main(String[] args) {
		//获取扩展名为.java所有文件
		//创建File对象
		File file = new File("E:\\JavaSE1115\\code\\day11_code");
		//获取指定扩展名的文件,由于要对所有文件进行扩展名筛选,因此调用方法需要传递过滤器
		File[] files = file.listFiles(new FileFilterBySuffix(".java"));
		//遍历获取到的所有符合条件的文件
		for (File f : files) {
			System.out.println(".........."+f);
		}
	}
}
//定义类实现文件名称FilenameFilter过滤器
class FileFilterBySuffix implements FilenameFilter{
	private String suffix ;
	//在创建过滤器对象时,明确具体需要过滤的文件名称
	public FileFilterBySuffix(String suffix){
		this.suffix = suffix;
	}
	public boolean accept(File dir, String name) {
		return  name.endsWith(suffix);
	}
}

listFiles()可以接受一个FileFilter过滤器FilenameFilter过滤器中的accept方法接受两个参数,一个是当前文件或文件夹所在的路径,一个是当前文件或文件夹对象的名称

public class FileDemo2 {
	public static void main(String[] args) {
		//获取扩展名为.java所有文件
		//创建File对象
		File file = new File("E:\\JavaSE1115\\code\\day11_code");
		//获取指定目录下的文件夹
		File[] files = file.listFiles(new FileFileterByDir());
		//遍历获取到的所有符合条件的文件
		for (File f : files) {
			System.out.println(f);
		}
	}
}
//文件过滤器
class FileFileterByDir implements FileFilter{
	public boolean accept(File pathname) {
		return pathname.isDirectory();
	}
}

获取所有子目录中的内容:

public class FileDemo2 {
	public static void main(String[] args) {
		File file = new File("d:\\test");
		getFileAll(file);
	}
	//获取指定目录以及子目录中的所有的文件
	public static void getFileAll(File file) {
		File[] files = file.listFiles();
		//遍历当前目录下的所有文件和文件夹
		for (File f : files) {
			//判断当前遍历到的是否为目录
			if(f.isDirectory()){
				//是目录,继续获取这个目录下的所有文件和文件夹
				getFileAll(f);
			}else{
				//不是目录,说明当前f就是文件,那么就打印出来
				System.out.println(f);
			}
		}
	}
}

这里面使用了递归的思想


版权声明:本文为qq_43310689原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。