java成长笔记

File遍历或删除所有文件

2019-07-31  本文已影响0人  G_uest
  1. 遍历指定目录下的所有文件
  2. 删除指定文件夹

实现方式:
这里我使用了listFiles(FileFilter filter)方法,通过匿名内部类实现的 FileFilter 接口

  1. 遍历文件夹下所有文件和文件夹。
  2. 调用方法一,返回ArrayList,遍历集合,对文件(夹)进行删除操作。
  3. 调用方法一,返回ArrayList,对集合进行过滤。

过滤器

方法 返回值 说明
listFiles(FileFilter filter) File[] 返回抽象路径名数组,这些路径名表示此抽象路径名表示的目录中满足指定过滤器的文件和目录。
listFiles(FilenameFilter filter) File[] 返回抽象路径名数组,这些路径名表示此抽象路径名表示的目录中满足指定过滤器的文件和目录。

二者作用一样,只不过实现接口略有不同。

import java.io.File;
import java.io.FileFilter;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

/**
 * 遍历文件夹中的所有文件,包括子文件夹下的文件
 * 遍历之后,逐级删除文件和文件夹
 * @author jiayanzhao
 * 2019年7月31日
 */
public class fileTraversalAndDeletion {

    public static void main(String[] args) {
        File file = new File("F:/test");
        // 如果文件不存在
        if (!file.exists()) {
            System.out.println("File does not exist");
            return;
        }
        // 遍历目录中的文件并打印
        ArrayList<File> files = traversalFile(file);
        for (File temFile : files) {
            System.out.println(temFile);
        }
        // 删除文件夹,及文件夹下的所有内容
//      deletionFile(file);
        
    }
    
    /**
     * 遍历文件夹下所有文件和文件夹
     * @param file
     */
    static ArrayList<File> traversalAll(File file) {
        ArrayList<File> files = new ArrayList<>();
        // 数组形式保存当前目录下的文件和文件夹
                // 匿名内部类实现 FileFilter 接口
        File[] tempFiles = file.listFiles(new FileFilter() {
            @Override
            public boolean accept(File pathname) {
                // 如果是文件夹,就递归遍历 子文件夹。
                if (pathname.isDirectory()) {
                    // 把子文件夹中的文件添加到 大集合 中
                    files.addAll(traversalAll(pathname));
                }
                return true;
            }
        });
        // 数组转为集合
        List<File> tempFilesList = Arrays.asList(tempFiles);
        // 把每个文件夹下的 文件和文件夹 保存到大集合中
        files.addAll(tempFilesList);
        return files;
    }
    
    /**
     * 删除文件夹和子文件夹下所有文件
     * @param file
     */
    static void deletionFile(File file) {
        ArrayList<File> files = traversalAll(file);
        // 先遍历删除 文件 和 子文件夹
        for (File deleteFile : files) {
            System.out.println(deleteFile + "---" + deleteFile.delete());
        }
    
        // 再最后删除file文件夹
        System.out.println(file + "---" + file.delete());
    }
    
    /**
     * 遍历当前目录以及子目录下所有文件
     * @param file
     * @return
     */
    static ArrayList<File> traversalFile(File file){
        ArrayList<File> tempFiles = traversalAll(file);
        ArrayList<File> files = new ArrayList<>();
        // 把大集合中的所有 文件 逐个添加到files中
        for (int i = 0; i < tempFiles.size(); i++) {
            if (tempFiles.get(i).isFile()) {
                files.add(tempFiles.get(i));
            }
        }
        return files;
    }
}
上一篇下一篇

猜你喜欢

热点阅读