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

Java-扫描文件夹并按文件类型返回文件大小,java,file,recursion,Java,File,Recursion,假设我要扫描一个包含4-.xlsx文件、8-.docx文件、10-.pdf文件和4.pptx文件的文件夹。我希望我的输出不仅包括文件的分解,还包括所有文件大小的总和 示例输出 文件类型|#文件数|文件大小总和(MB) .xlsx|4|32 .docx|8|85 我还发现了一些基于扩展名查找和返回文件的其他代码,因此我想知道是否有一些java代码可以查找文件大小?如果我不清楚,我道歉 提前谢谢 只需查看文件对象的“长度” import java.io.File; File file = new

假设我要扫描一个包含4-.xlsx文件、8-.docx文件、10-.pdf文件和4.pptx文件的文件夹。我希望我的输出不仅包括文件的分解,还包括所有文件大小的总和

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

我还发现了一些基于扩展名查找和返回文件的其他代码,因此我想知道是否有一些java代码可以查找文件大小?如果我不清楚,我道歉


提前谢谢

只需查看文件对象的“长度”

import java.io.File;

File file = new File(<filepath>);
int sizeInBytes = file.length();
导入java.io.File;
File File=新文件();
int sizeInBytes=file.length();

如果您已经有一个计算特定类型文件的工作解决方案,那么您应该能够相当容易地集成大小总和。

这里有一个方法,您可以在目录上递归(或不递归)使用

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));
    }

}
private static HashMap sizesForDirectory(字符串目录、布尔递归insubdirectories){
文件夹=新文件(目录);
File[]listOfFiles=folder.listFiles();
HashMap sizesByExtension=新HashMap();
if(listOfFiles!=null){
对于(文件:listOfFiles){
如果(!file.isDirectory()){
字符串扩展名=file.getName().replaceAll(“.\\。”,”);
if(sizesByExtension.containsKey(扩展)){
Long size=sizesByExtension.get(扩展名)+Long.valueOf(file.length());
sizesByExtension.put(扩展名,大小);
}否则{
sizesByExtension.put(扩展名,file.length());
}
}else if(递归insubdirectories){
HashMap sizesForSubdirectory=sizesForDirectory(file.getAbsolutePath(),RecurseInsubDirectory);
for(字符串ext:sizesForSubdirectory.keySet()){
if(sizesByExtension.containsKey(ext)){
sizesByExtension.put(ext,sizesByExtension.get(ext)+sizesForSubdirectory.get(ext));
}否则{
sizesByExtension.put(ext,sizesForSubdirectory.get(ext));
}
}
}
}
}
按扩展返回大小;
}
公共静态void main(字符串[]args){
HashMap sizesByExtension=sizesForDirectory(“您的/path”,true);
for(字符串ext:sizesByExtension.keySet()){
System.out.println(ext+“:“+sizesByExtension.get(ext));
}
}

您搜索过一点吗?这里有一个例子:我很抱歉没有花时间深入搜索stackoverflow。我很欣赏这个方向。谢谢。这已经很接近了!——这似乎只遍历一个文件夹--我希望它遍历文件夹的整个目录,并返回每种文件类型的大小..我编辑了我的答案,添加了一个递归遍历目录的方法,而不是只列出目录。