Java - 扫描文件夹并按文件类型返回文件大小

时间:2014-10-24 13:26:28

标签: java file recursion

假设我想扫描一个包含4 - .xlsx文件,8 -.docx文件,10 - .pdfs和4 .pptx文件的文件夹。我希望我的输出不仅包括文件的细分,还包括它们放在一起的大小的总和。

示例输出
文件类型|文件数量|文件大小总和(以MB为单位)
.xlsx | 4 | 32
.docx | 8 | 85

我找到了一些基于扩展来查找和返回文件的其他代码,所以我只是想知道是否有一些java代码可以找到文件大小?如果我不清楚,我道歉...

先谢谢了。

2 个答案:

答案 0 :(得分:0)

只需查看File对象的“长度”。

import java.io.File;

File file = new File(<filepath>);
int sizeInBytes = file.length();

如果您已经有一个可以计算特定类型文件的工作解决方案,那么您应该可以非常轻松地集成大小的总和。

答案 1 :(得分:0)

这里有一个方法可以在目录

上递归使用(或不使用)
private static HashMap<String, Long> sizesForDirectory(String directory, boolean recurseInSubDirectories) {
    File folder = new File(directory);
    File[] listOfFiles = folder.listFiles();

    HashMap<String, Long> sizesByExtension = new HashMap<String, Long>();
    if (listOfFiles != null) {
        for (File file : listOfFiles) {
            if (!file.isDirectory()) {
                String extension = file.getName().replaceAll(".*\\.", "");
                if (sizesByExtension.containsKey(extension)) {
                    Long size = sizesByExtension.get(extension) + Long.valueOf(file.length());
                    sizesByExtension.put(extension, size);
                } else {
                    sizesByExtension.put(extension, file.length());
                }
            } else if (recurseInSubDirectories) {
                HashMap<String, Long> sizesForSubdirectory = sizesForDirectory(file.getAbsolutePath(), recurseInSubDirectories);
                for (String ext : sizesForSubdirectory.keySet()) {
                    if (sizesByExtension.containsKey(ext)) {
                        sizesByExtension.put(ext, sizesByExtension.get(ext) + sizesForSubdirectory.get(ext));
                    } else {
                        sizesByExtension.put(ext, sizesForSubdirectory.get(ext));
                    }
                }
            }
        }
    }

    return sizesByExtension;
}

public static void main(String[] args) {

    HashMap<String, Long> sizesByExtension = sizesForDirectory("your/path", true);

    for (String ext : sizesByExtension.keySet()) {
        System.out.println(ext + " : " + sizesByExtension.get(ext));
    }

}