文件夹大小:获取文件夹大小(file folder size)

你知道如何在 Java 中获取文件夹大小吗?

你知道如何在 Java 中获取文件夹大小吗?

文件类中的 length()方法仅适用于文件,使用该方法我总是得到 0 的大小。

28

使用 apache-commons-io,有一个FileUtils类与sizeOfDirectory方法

21
import java.io.File;
import org.apache.commons.io.FileUtils;
public class FolderSize
{
  public static void main(String[] args)
   {
    long size = FileUtils.sizeOfDirectory(new File("C:/Windows/folder"));
    System.out.println("Folder Size: " + size + " bytes");
   }
}
7
import java.io.File;
public class GetFolderSize {
    int totalFolder = 0;
    int totalFile = 0;
    public static void main(String args[]) {
        String folder = "C:/GetExamples";
        try {
            GetFolderSize size = new GetFolderSize();
            long fileSizeByte = size.getFileSize(new File(folder));
            System.out.println("Folder Size: " + fileSizeByte + " Bytes");
            System.out.println("Total Number of Folders: "
                + size.getTotalFolder());
            System.out.println("Total Number of Files: " + size.getTotalFile());
        } catch (Exception e) {}
    }
    public long getFileSize(File folder) {
        totalFolder++;
        System.out.println("Folder: " + folder.getName());
        long foldersize = 0;
        File[] filelist = folder.listFiles();
        for (int i = 0; i < filelist.length; i++) {
            if (filelist[i].isDirectory()) {
                foldersize += getFileSize(filelist[i]);
            } else {
                totalFile++;
                foldersize += filelist[i].length();
            }
        }
        return foldersize;
    }
    public int getTotalFolder() {
        return totalFolder;
    }
    public int getTotalFile() {
        return totalFile;
    }
}
4

简单地递归遍历所有子文件夹有一个小错误。在某些文件系统上,可以使用符号链接创建循环目录结构,如下所示:

mkdir -- parents father/son
ln -sf ${PWD}/father father/son
ls father/son/father/son/father/son/father/son/

要防止此错误,可以使用 java.io.File # getCanonicalPath 方法。的代码是对previous answer的轻微修改。

public static long getFileSize(File folder) throws IOException {
    return ( getFileSize ( folder , new HashSet < String > ( ) ) ) ;
}
public static long getFileSize(File folder, Set<String> history)
        throws IOException {
    long foldersize = 0;
    File[] filelist = folder.listFiles();
    for (int i = 0; i < filelist.length; i++) {
        System.err.println("HISTORY");
        System.err.println(history);
        boolean inHistory = history.contains(filelist[i].getCanonicalPath());
        history.add(filelist[i].getCanonicalPath());
        if (inHistory) {
            // skip it
        } else if (filelist[i].isDirectory()) {
            foldersize += getFileSize(filelist[i], history);
        } else {
            foldersize += filelist[i].length();
        }
    }
    return foldersize;
}

本站系公益性非盈利分享网址,本文来自用户投稿,不代表码文网立场,如若转载,请注明出处

(125)
Python餐厅点餐系统:Java餐厅计费系统(restaurant billing)
上一篇
Python开多线程:多线程Python请求
下一篇

相关推荐

  • filezilla服务器:如何使用Filezilla服务器进行文件传输

    FileZilla Server 是一个免费的FTP服务器,可以在Windows操作系统上运行。它允许用户从远程位置上传和下载文件,并且可以通过使用SSL/TLS实现安全的文件传输。…

    2023-02-02 02:52:28
    0 15 76
  • 数据文件:免费 XML数据文件(sample xml files)

    我在哪里可以下载免费的 XML 格式的数据文件与任何有意义的数据(任何类型,人,客户,书)与 1000 + 记录?…

    2022-12-04 05:09:22
    0 70 19
  • FileMakerPro和Onedrive

    我的公司希望在 onedrive 上放置一个 excel 文件,并将该文件连接到 FM 数据库,这意味着当 Excel 被编辑时,数据库被更新 / 编辑,这是可能的吗?…

    2022-11-11 15:16:07
    0 82 57

发表评论

登录 后才能评论

评论列表(57条)