You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Java中仅列出Azure Blob容器各子文件夹的foo1.json?

解决方案:高效获取Azure Blob中指定子文件夹下的foo1.json及其修改时间

核心优化思路

先通过分层遍历定位到MainFolder下的所有子文件夹,再针对每个子文件夹直接获取对应foo1.json的属性,避免遍历所有Blob文件,大幅减少对Blob服务的调用次数。

代码实现示例

BlobContainerClient containerClient = getBlobClient();
ListBlobsOptions folderOptions = new ListBlobsOptions()
        .setPrefix("MainFolder/") // 限定主文件夹范围
        .setDetails(new BlobListDetails().setRetrieveMetadata(true));

// 分层遍历获取MainFolder下的所有子文件夹
PagedIterable<BlobItem> subFolders = containerClient.listBlobsByHierarchy("/", folderOptions, Duration.ofSeconds(30));

// 遍历每个子文件夹,获取目标文件的修改时间并更新HashMap
for (BlobItem folderItem : subFolders) {
    if (folderItem.isPrefix()) { // 判断当前项是否为文件夹前缀
        String folderPath = folderItem.getName();
        String targetBlobPath = folderPath + "foo1.json";
        
        BlobClient blobClient = containerClient.getBlobClient(targetBlobPath);
        if (blobClient.exists()) { // 确保目标文件存在,避免空指针
            BlobProperties properties = blobClient.getProperties();
            OffsetDateTime lastModified = properties.getLastModified();
            
            // 对比HashMap中的旧时间,执行更新逻辑
            String key = targetBlobPath; // 可根据需求用子文件夹名作为key
            if (!lastModified.equals(yourHashMap.get(key))) {
                yourHashMap.put(key, lastModified);
                // 此处可添加文件更新后的后续操作(如下载、同步等)
            }
        }
    }
}

补充说明

  • 效率优势:仅需遍历子文件夹(数量远少于所有Blob文件),每个子文件夹仅调用1次getProperties()接口,调用量可控。
  • 容错处理:保留blobClient.exists()检查,避免部分子文件夹无foo1.json时出现异常。
  • 备选方案(适合文件量少的场景):若不想分层遍历,可直接用listBlobs获取MainFolder下所有Blob,再过滤名称以/foo1.json结尾的项,但这种方式会返回所有Blob,文件量大时效率较低:
    ListBlobsOptions options = new ListBlobsOptions()
            .setPrefix("MainFolder/")
            .setDetails(new BlobListDetails().setRetrieveMetadata(true));
    
    PagedIterable<BlobItem> allBlobs = containerClient.listBlobs(options, Duration.ofSeconds(30));
    
    for (BlobItem blobItem : allBlobs) {
        if (blobItem.getName().endsWith("/foo1.json")) {
            OffsetDateTime lastModified = blobItem.getProperties().getLastModified();
            // 对比更新HashMap逻辑
        }
    }
    

内容的提问来源于stack exchange,提问作者user6090970

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 11:10:42