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

如何在Azure Blob容器中获取文件夹名及指定文件夹下的所有文件

解决方案

1、获取容器内所有符合前缀要求的文件夹名称

Azure Blob 存储是扁平结构,我们看到的「文件夹」实际是 blob 名称前缀模拟的虚拟目录。你调用listBlobs方法时关闭扁平化遍历开关,即可筛选出当前层级的所有虚拟目录:

Iterable<ListBlobItem> rootItems = container.listBlobs(null, false, EnumSet.noneOf(BlobListingDetails.class), null, null);
List<CloudBlobDirectory> targetDirs = new ArrayList<>();

for (ListBlobItem item : rootItems) {
    // 仅处理虚拟目录类型的项
    if (item instanceof CloudBlobDirectory) {
        CloudBlobDirectory dir = (CloudBlobDirectory) item;
        // getPrefix默认返回带末尾/的路径,这里去掉后缀提取纯文件夹名
        String dirName = dir.getPrefix().replaceAll("/$", "");
        // 匹配DATA_FILE_前缀规则
        if (dirName.startsWith("DATA_FILE_")) {
            targetDirs.add(dir);
        }
    }
}

遍历完成后targetDirs列表里就存了所有符合要求的文件夹对象,也可以自行提取dirName存纯名称列表。

2、批量获取多个指定文件夹下的所有文件

你已经实现了单个文件夹的文件读取逻辑,只要遍历上面拿到的目标文件夹列表,复用现有逻辑即可,完整整合代码如下:

import com.microsoft.azure.storage.CloudStorageAccount;
import com.microsoft.azure.storage.blob.*;
import java.io.ByteArrayOutputStream;
import java.util.ArrayList;
import java.util.EnumSet;
import java.util.List;

public class BlobProcessor {
    public static void main(String[] args) throws Exception {
        String connStr = "你的Azure存储连接字符串";
        CloudStorageAccount c = CloudStorageAccount.parse(connStr);
        CloudBlobClient blobClient = c.createCloudBlobClient();
        CloudBlobContainer container = blobClient.getContainerReference("testcontainer");

        // 第一步:筛选目标文件夹
        Iterable<ListBlobItem> rootItems = container.listBlobs(null, false, EnumSet.noneOf(BlobListingDetails.class), null, null);
        List<CloudBlobDirectory> targetDirs = new ArrayList<>();
        for (ListBlobItem item : rootItems) {
            if (item instanceof CloudBlobDirectory) {
                CloudBlobDirectory dir = (CloudBlobDirectory) item;
                String dirName = dir.getPrefix().replaceAll("/$", "");
                if (dirName.startsWith("DATA_FILE_")) {
                    targetDirs.add(dir);
                }
            }
        }

        // 第二步:遍历每个文件夹读取所有文件
        for (CloudBlobDirectory dir : targetDirs) {
            Iterable<ListBlobItem> blobs = dir.listBlobs();
            for (ListBlobItem blobItem : blobs) {
                // 加类型判断避免子目录强转报错
                if (blobItem instanceof CloudBlockBlob) {
                    ByteArrayOutputStream output = new ByteArrayOutputStream();
                    CloudBlockBlob blob = (CloudBlockBlob) blobItem;
                    blob.download(output);
                    // 你的原有业务处理逻辑
                }
            }
        }
    }
}

补充说明

如果需要读取文件夹下所有嵌套层级的文件,把dir.listBlobs()替换为dir.listBlobs(null, true, EnumSet.noneOf(BlobListingDetails.class), null, null)即可,第二个参数设为true代表开启扁平化遍历,会返回该目录下所有层级的blob。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 17:42:00