文件中遍历的方法
遍历目录
1.public String[] list() 返回String数组,表示File目录中的所有子文件或目录
2.public File[] listFiles() 返回File数组,表示File目录中的所有子文件或目录(包含路径)
注意事项:
1.两个方法遍历的是构造方法给出的目录
2.如果构造方法给出的目录路径不存在,会抛出空指针异常
3.如果构造方法给出的不是一个目录也会抛出空指针异常
public static void method(){ File file = new File("Month\src\LearnFile"); /*String[] filestr = file.list(); for(String str : filestr){ System.out.println(str); }*/ File[] files = file.listFiles(); for(File fs : files){ System.out.println(fs); }
若想只得到java类型的文件该怎么做呢?
java中提供了一个过滤器的工具:
过滤器;(对遍历行为进行删选)
在File类中有两个和L istFiles重载的方法,方法的参数传递的就是过滤器
1.File[] listFiles(FileFilter filter)
java. io. FileFilter接口:用于抽象路径名(File对象)的过滤器。
作用:用来过滤文件(File对象)
抽象方法:用来过滤文件的方法 boolean accept(File pathname) 测试指定抽象路径名是否应该包含在某个路径名列表中。
参数: File pathname:使用ListFiles方法遍历目录,得到的每一个文件对象
2.File[] listFiles(FilenameFilter filter)
*java. io. FilenameFilter接口**:实现此接口的类实例可用于过滤器文件名。
作用:用于过滤文件名称
抽象方法:用来过滤文件的方法 boolean accept(File dir, String name) 测试指定文件是否应该包含在某-文件列表中。
参数: File dir:构造方法中传递的被遍历的目录
String name :使用ListFiles方法遍历目录,获取的每一个文件/文件夹的名称 (可以先将两个参数封装为一个File对象)
注意: 两个过滤器接口是没有实现类的,需要我们自己写实现类,重写过滤的方法accept,在方法中自己定义过滤的规则
处理过程:
1.对构造方法传递的目录进行遍历,获取目录中每一个文件/文件夹,将其封装为File对象
2.调用参数传递的过滤器方法accept
3.把遍历得到的每一个File对象,传递给accept方法的参数pathname
accept方法返回一个布尔值
true:把传递过来的File对象保存到File数组中
false:不会把File对象保存到数组中
创建一个过滤器接口的实现类并重写其中的accept方法
import java.io.File; import java.io.FileFilter; public class FileFilterImpl implements FileFilter { @Override public boolean accept(File pathname) { if(pathname.isDirectory()){ return true; } //如果是目录者继续遍历目录(递归调用) return pathname.getName().toLowerCase().endsWith(".java"); } }
public static void outjavafile(File file){ if(file.isFile()){return;} //如果是文件,则直接结束方法 File[] files = file.listFiles(new FileFilterImpl()); for(File fs : files){ if(fs.isDirectory()){ //如果是目录,递归调用,遍历内部文件 outjavafile(fs); }else { System.out.println(fs); } } }