按扩展名列出和计算文件

时间:2014-11-24 18:06:30

标签: java list recursion count java.util.scanner

到目前为止,我有一个这样的代码:

import java.io.File;
import java.util.Scanner;

public class Test {
static Scanner input = new Scanner(System.in);

public static void fileListing(File[] files, int depth) {
    if(depth == 0)
        return;
    else {
        for(File file: files) {
            if(file.isDirectory())
                fileListing(file.listFiles(), depth-1);
            else {
                String ext;
                String fileName = file.getName();
                if(fileName.lastIndexOf(".") != -1 && fileName.lastIndexOf(".") != 0)
                    ext = fileName.substring(fileName.lastIndexOf(".")+1);
                else
                    return;
                System.out.println(ext);
            }
        }
    }
}

public static void main(String [] args) {
    System.out.printf("Path: ");
    String path = input.nextLine();

    if(new File(path).isDirectory()) {
        System.out.printf("Depth: ");
        int depth = input.nextInt();
        File[] file = new File(path).listFiles();
        fileListing(file, depth);
    }
    else {
        System.out.printf("The path %s isn't valid.", path);
        System.exit(0);
    }
  }
}

我的输出列出文件'某个目录中的扩展名,例如克。

txt
txt
doc

如何改进此代码以显示文件'带计数器的扩展?例如上面的输出应该如下所示:

2 txt
1 doc

1 个答案:

答案 0 :(得分:0)

您可以使用Map:代码为:

    Map<String,Integer> countExt = new HashMap<String,Integer>();

   // Start from here inside your if statement
       ext = fileName.substring(fileName.lastIndexOf(".")+1);
    // If object already exists
    if(countExt.containsKey(ext)){
      Integer count = countExt.get(ext);
      count++;
     //Remove old object and add new
      countExt.remove(ext));
       countExt.put(ext,count);

    }
    // If extension is new 
    else
     countExt.put(ext,1);


    //For Display

    Set<String> keySet = countExt.keys();
    for(String key : keySet){
     System.out.println(key +" : "+countExt.get(key));

    }