在java中计算S3对象(文件夹)大小

Has*_*eeb 6 java amazon-s3 amazon-web-services aws-sdk

我将所有类型的文件存储在亚马逊 S3 上。在亚马逊S3存储桶中,所有文件都存储在不同的文件夹中,我知道亚马逊S3中没有文件夹的概念。对象只能通过它们的键来识别。如果我存储任何带有“mydocs/personal/profile-pic.jpg”之类的密钥的文件,这意味着将在那里创建两个父文件夹(mydocs 文件夹内的个人文件夹)。

我想计算java中像“mydocs”这样的任何文件夹的大小。我使用下面给出的代码计算了存储桶总大小:

public long calculateBucketSize(String bucketName) {
long totalSize = 0;
    int totalItems = 0;
    ObjectListing objects = listObjects(bucketName);
    do {
        for (S3ObjectSummary objectSummary : objects.getObjectSummaries()) {
            totalSize += objectSummary.getSize();
            totalItems++;
        }
        objects = listNextBatchOfObjects(objects);
    } while (objects.isTruncated());
    System.out.println("Amazon S3 bucket: " + bucketName + " containing "
            + totalItems + " objects with a total size of " + totalSize
            + " bytes.");

    return totalSize;
}
Run Code Online (Sandbox Code Playgroud)

此方法将返回存储桶的总大小。我想计算任何单个文件夹的大小。任何帮助将不胜感激。

Tej*_*ran 0

我认为您想要获取每个级别的文件夹大小。就像如果您有一个根文件夹 R-Folder 和两个子文件夹 S1.1-Folder、S1.2-Folder,然后 S1.1-Folder 又具有三个子文件夹 S1.1.1-Folder、S1.1.2-Folder、S1。 1.3-文件夹。现在您想要每个文件夹的文件夹大小

R-Folder (32MB)
|__S1.1-Folder (22MB)
|  |__S1.1.1-Folder (7MB)
|  |__S1.1.2-Folder (5MB)
|  |__S1.1.3-Folder (10MB)
|
|__S1.2-FOlder (10MB)
Run Code Online (Sandbox Code Playgroud)

我对么 ?

您必须保留状态为已完成或未完成的列表文件夹详细信息 - 并递归扫描每个文件夹。当内部文件夹成功完成时,您必须更新其相应父级的大小,并且该父级将更新到相应的父级,并且每次都会继续直到 root。