Java-File-递归:用户输入文件夹路径,返回该文件夹下的文件类型以及对应的数量

使用递归,根据输入文件夹路径,返回该文件夹下的文件类型以及对应的数量

  • 创建一个方法,目的是拿到文件夹路径下所有的文件(无论是文件还是目录)进行判断,返回所有的文件类型和数量。
package com.xiahk;

import java.io.File;
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;
import java.util.Set;

public class Test3 {

    public static void main(String[] args) {

        Map map = new HashMap();
        Scanner sc = new Scanner(System.in);
        System.out.println("输入文件夹路径");
        File file = new File(sc.nextLine());
        getFile(file, map);
        Set keySet = map.keySet();
        for (String string : keySet) {
            System.out.println(string + "类型的文件有 " + map.get(string) + "个");
        }

    }
  • 首先获得文件夹路径,将路径下的所有文件转换成File[]数组,在遍历该数组。遍历是判断File对象是否为文件,是的话就拿到文件的后缀名。
  • 在Map集合内查看是否存在该类型文件后缀,如果没有便放到集合中,对应的值设置为1。存在的话就拿到对应的值加一再放进去。
  • 如果是文件夹的话,我们可以使用递归,调用本身的方法。
  • 返回Map集合,遍历便可拿到所有的文件类型以及对应的数量。
    public static void getFile(File file, Map map) {
        File[] files = file.listFiles();
        for (File f2 : files) {
            // 如果是文件
            if (f2.isFile()) {
                String name = f2.getName();
                // 获取文件的后缀名
                String[] split = name.split("\\.");
                int length = split.length;
                String key = split[length - 1];
                // 判断是否存在
                boolean iskey = map.containsKey(key);
                if (iskey) {
                    map.put(key, map.get(key) + 1);
                } else {
                    map.put(key, 1);
                }
            }
            // 如果是文件夹
            if (f2.isDirectory()) {
                getFile(f2, map);
            }
        }
    }
}

例如查看 E:\HBuilder 下的所有文件类型和数量

查看文件类型数量

以上是博主目前初学Java写的,可能会有一些问题或者说有更好的方法来实现功能,希望大家可以留言互相交流。

已知问题:

当路径为存储盘根目录时,会有空指针异常

异常情况

你可能感兴趣的:(Java-File-递归:用户输入文件夹路径,返回该文件夹下的文件类型以及对应的数量)