本帖最后由 @白纸嘿字@ 于 2015-10-6 20:24 编辑
FileFilterBySuffix
- package com.itheima.io.filter;
- import java.io.File;
- import java.io.FileFilter;
- public class FileFilterBySuffix implements FileFilter {
- private String suffix;
-
- public FileFilterBySuffix(String suffix) {
- super();
- this.suffix = suffix;
- }
- @Override
- public boolean accept(File pathname) {
- return pathname.getName().endsWith(suffix);
- }
- }
复制代码FileTest
- package com.itheima.io.Test;
- import java.io.File;
- import java.io.FileFilter;
- import java.util.ArrayList;
- import java.util.List;
- import com.itheima.io.filter.FileFilterBySuffix;
- public class FileTest {
- /**
- * @param args
- */
- public static void main(String[] args) {
- /*
- * 获取指定文件夹下(包含子目录)的指定类型的文件的集合。
- *
- * 思路:
- * 1、既然包含子目录,就需要递归。
- * 2、要求指定类型的文件,在递归中使用过滤器。
- * 3、满足以上条件,就存储集合中
- */
- File dir=new File("I:\\");
- List<File> list=fileList(dir,".pdf");
- for (File file : list) {
- System.out.println(file);
- }
- }
- /*
- * 获取指定文件夹下指定类型文件集合的功能
- */
- public static List<File> fileList(File dir,String suffix){
- /*
- * 建立“容器”对象
- */
- List<File> list=new ArrayList<File>();
- /*
- * 建立过滤器对象
- */
- FileFilter fileFilter=new FileFilterBySuffix(suffix);
-
- getFileList(dir, list, fileFilter);
-
- return list;
- }
- /**
- * 递归中的每一级都是用同一个“容器”和过滤器,故“容器”和过滤器不能在递归函数中定义,要作为递归函数参数
- *
- * @param dir 被指定的文件夹
- * @param list 存储满足条件的File对象的“容器”
- * @param filter 过滤器(指定类型)
- */
- public static void getFileList(File dir,List<File> list,FileFilter filter){
- /*
- * 通过listFiles(),获取dir的所有文件和文件夹对象
- */
- File[] files=dir.listFiles();
- /*
- * 获取指定文件夹中每一个文件和文件夹
- */
- for (File file : files) {
- /*
- * 是不是文件夹?是,递归。不是,用过滤器获取指定文件。
- */
- if(file.isDirectory()){
- getFileList(file, list, filter);
- }else{
- if(filter.accept(file)){
- list.add(file);
- }
- }
- }
- }
- }
复制代码
编译没有通过,报告“ java.lang.NullPointerException”,可是看了几遍,没有发现问题出在哪?
ps:这个根目录是有的。
|