当前位置: 首页 > 知识库问答 >
问题:

使用Java获取Azure Data Lake Gen2中的文件夹大小

梁华清
2023-03-14

互联网上有一些关于C#计算文件夹大小的文献。但是找不到Java。

  1. 有简单的方法知道文件夹大小吗?在Gen2
  2. 如果没有,如何计算?

在互联网上,有几个例子是关于C#和powershell的(2)。用Java有什么办法吗?

共有1个答案

钦侯林
2023-03-14

据我所知,Azure Data Lake Gen2中没有直接提供文件夹大小的API。

递归地做:

DataLakeServiceClient dataLakeServiceClient = new DataLakeServiceClientBuilder()
        .credential(new StorageSharedKeyCredential(storageAccountName, secret))
        .endpoint(endpoint)
        .buildClient();
DataLakeFileSystemClient container = dataLakeServiceClient.getFileSystemClient(containerName);


/**
 * Returns the size in bytes
 *
 * @param folder
 * @return
 */
@Beta
public Long getSize(String folder) {
    DataLakeDirectoryClient directoryClient = container.getDirectoryClient(folder);
    if (directoryClient.exists()) {
        AtomicInteger count = new AtomicInteger();
        return directoryClient.listPaths(true, false, null, null)
                .stream()
                .filter(x -> !x.isDirectory())
                .mapToLong(PathItem::getContentLength)
                .sum();
    }
    throw new RuntimeException("Not a valid folder: " + folder);
}

这递归地遍历文件夹并获得大小。

每页默认记录为5000条。从文档:

recursive–指定调用是否应递归地包括所有路径。

用户原则名称返回-如果"true",则在x-ms-所有者、x-ms-组和x-ms-acl响应标头中返回的用户标识值将从Azure Active Directory对象ID转换为用户主体名称。如果"false",这些值将作为Azure Active Directory对象ID返回。默认值为false。请注意,组和应用程序对象ID没有翻译,因为它们没有唯一的友好名称。

maxResults–指定每页返回的最大Blob数,包括所有BlobPrefix元素。如果请求未指定maxResults或指定的值大于5000,则服务器每页最多将返回5000个项目。如果按页迭代,则传递给PagedItemerable等byPage方法的页大小。iterableByPage(int)将优先于此值。

超时-一个可选的超时值,超过该值将引发运行异常。

 类似资料:
  • 问题内容: 如何在Java中检索文件夹或文件的大小? 问题答案: 如果文件不存在,则以字节为单位返回文件的长度。没有内置的方法来获取文件夹的大小,你将不得不递归遍历目录树(使用代表目录的文件对象的方法)并为自己积累目录大小: 警告:此方法不足以用于生产。可能返回并导致。另外,它不考虑符号链接,并且可能具有其他故障模式。

  • 我想获取文件夹大小并重命名它,如果我的文件夹大小超过500 mbs然后重命名文件夹,下载到MusicDownload

  • 问题内容: 我想使用python快速找到任何文件夹的总大小。 这是我编写的用于获取文件夹总大小的简单脚本,大约花费了60秒(+ -5秒)。通过使用多处理,我在四核计算机上将其缩短到23秒。 使用Windows文件浏览器仅需约3秒钟(右键单击->属性即可自行查看)。那么,有没有一种更快的方法来找到文件夹的总大小,使其接近Windows可以达到的速度? Windows 7,python 2.6(搜索,

  • 问题内容: 我需要使用文件夹中文件的所有名称创建一个列表。 例如,如果我有: 我想将它们存储为 with 作为值。 用Java做到最好的方法是什么? PS:我在Mac OS X上 问题答案: 你可以这样做: 你只想获取JPEG文件还是所有文件?

  • 我想通过使用“文件类”从项目文件夹中获取文件,我如何做到这一点?

  • 问题内容: 我想使用“文件类”从项目文件夹中获取文件,我该怎么办? 问题答案: 嗯,有很多不同的方法来获取Java文件,但这是一般要点。 不要忘记,您至少需要将其包装在a 中,因为File是其中的一部分,这意味着它必须具有try-catch块。 不是要解决Ericson的问题,而是如果您使用的是实际的软件包,则除非明确使用文件的位置,否则文件的位置将有问题。相对路径与Packages混为一谈。 即