Java ile blobları listeleme

Bu makalede , Java için Azure Depolama istemci kitaplığı ile blobların nasıl liste adı verilmektedir.

Önkoşullar

  • Bu makalede, Java için Azure Blob Depolama istemci kitaplığıyla çalışmak üzere ayarlanmış bir projeniz olduğu varsayılır. Paket yükleme, yönerge ekleme import ve yetkili istemci nesnesi oluşturma dahil olmak üzere projenizi ayarlama hakkında bilgi edinmek için bkz. Azure Depolama ve Java ile Çalışmaya Başlama.
  • Yetkilendirme mekanizmasının blobları listeleme izinleri olmalıdır. Daha fazla bilgi edinmek için aşağıdaki REST API işlemi için yetkilendirme kılavuzuna bakın:

Blob listeleme seçenekleri hakkında

Kodunuzdan blobları listelediğinizde, Sonuçların Azure Depolama'dan nasıl döndürüleceğini yönetmek için seçenekler belirtebilirsiniz. Her sonuç kümesinde döndürülecek sonuç sayısını belirtebilir ve ardından sonraki kümeleri alabilirsiniz. Adları bu karakter veya dizeyle başlayan blobları döndürmek için bir ön ek belirtebilirsiniz. Ayrıca blobları düz listeleme yapısında veya hiyerarşik olarak listeleyebilirsiniz. Hiyerarşik liste, blobları klasörler halinde düzenlenmiş gibi döndürür.

Depolama hesabındaki blobları listelemek için şu yöntemlerden birini çağırın:

Kaç sonuç döndürülür yönetme

Varsayılan olarak, bir listeleme işlemi aynı anda en fazla 5000 sonuç döndürür, ancak her listeleme işleminin döndürmesini istediğiniz sonuç sayısını belirtebilirsiniz. Bu makalede sunulan örneklerde, sonuçları sayfalarda nasıl döndürebileceğiniz gösterilir. Sayfalandırma kavramları hakkında daha fazla bilgi edinmek için bkz. Java için Azure SDK ile sayfalandırma.

Sonuçları ön ek ile filtreleme

Blob listesini filtrelemek için ListBlobsOptions.setPrefix(Dize ön eki)'ne parametre olarak prefix bir dize geçirin. Ön ek dizesi bir veya daha fazla karakter içerebilir. Ardından Azure Depolama yalnızca adları bu ön ek ile başlayan blobları döndürür.

Düz listeleme ile hiyerarşik listeleme karşılaştırması

Azure Depolama'daki bloblar hiyerarşik paradigma (klasik dosya sistemi gibi) yerine düz paradigma halinde düzenlenir. Ancak, bir klasör yapısını taklit etmek için blobları sanal dizinler halinde düzenleyebilirsiniz. Sanal dizin, blob adının bir bölümünü oluşturur ve sınırlayıcı karakteriyle gösterilir.

Blobları sanal dizinler halinde düzenlemek için blob adında bir sınırlayıcı karakteri kullanın. Varsayılan sınırlayıcı karakteri eğik çizgidir (/), ancak sınırlayıcı olarak herhangi bir karakteri belirtebilirsiniz.

Bir sınırlayıcı kullanarak bloblarınızı adlandırıyorsanız, blobları hiyerarşik olarak listelemeyi seçebilirsiniz. Hiyerarşik listeleme işlemi için Azure Depolama, üst nesnenin altındaki tüm sanal dizinleri ve blobları döndürür. Klasik bir dosya sisteminde program aracılığıyla geçiş yaptığınıza benzer şekilde hiyerarşide gezinmek için listeleme işlemini yinelemeli olarak çağırabilirsiniz.

Düz liste kullanma

Varsayılan olarak, listeleme işlemi düz bir dökümdeki blobları döndürür. Düz bir listede bloblar sanal dizine göre düzenlenmez.

Aşağıdaki örnekte, belirtilen kapsayıcıdaki bloblar düz liste kullanılarak listelenir:

public void listBlobsFlat(BlobContainerClient blobContainerClient) {
    System.out.println("List blobs flat:");

    blobContainerClient.listBlobs()
            .forEach(blob -> System.out.printf("Name: %s%n", blob.getName()));
}

Örnek çıktı şuna benzer:

List blobs flat:
Name: file4.txt
Name: folderA/file1.txt
Name: folderA/file2.txt
Name: folderA/folderB/file3.txt

Ayrıca, liste sonuçlarını filtreleme veya ek bilgileri gösterme seçeneklerini de belirtebilirsiniz. Aşağıdaki örnekte belirtilen ön eke sahip bloblar ve silinen bloblar listelenir:

public void listBlobsFlatWithOptions(BlobContainerClient blobContainerClient) {
    ListBlobsOptions options = new ListBlobsOptions()
            .setMaxResultsPerPage(2) // Low number for demonstration purposes
            .setDetails(new BlobListDetails()
                    .setRetrieveDeletedBlobs(true));

    System.out.println("List blobs flat:");

    int i = 0;
    Iterable<PagedResponse<BlobItem>> blobPages = blobContainerClient.listBlobs(options, null).iterableByPage();
    for (PagedResponse<BlobItem> page : blobPages) {
        System.out.printf("Page %d%n", ++i);
        page.getElements().forEach(blob -> {
            System.out.printf("Name: %s, Is deleted? %b%n",
                    blob.getName(),
                    blob.isDeleted());
        });
    }
}

Örnek çıktı şuna benzer:

List blobs flat:
Page 1
Name: file4.txt, Is deleted? false
Name: file5-deleted.txt, Is deleted? true
Page 2
Name: folderA/file1.txt, Is deleted? false
Name: folderA/file2.txt, Is deleted? false
Page 3
Name: folderA/folderB/file3.txt, Is deleted? false

Not

Gösterilen örnek çıktı, düz ad alanına sahip bir depolama hesabınız olduğunu varsayar. Depolama hesabınız için hiyerarşik ad alanı özelliğini etkinleştirdiyseniz, dizinler sanal değildir. Bunun yerine, bunlar somut, bağımsız nesnelerdir. Sonuç olarak, dizinler listede sıfır uzunluklu bloblar olarak görünür.

Hiyerarşik ad alanıyla çalışırken alternatif bir listeleme seçeneği için bkz. Dizin içeriğini listeleme (Azure Data Lake Storage 2. Nesil).

Hiyerarşik liste kullanma

Listeleme işlemini hiyerarşik olarak çağırdığınızda Azure Depolama, hiyerarşinin ilk düzeyindeki sanal dizinleri ve blobları döndürür.

Blobları hiyerarşik olarak listelemek için aşağıdaki yöntemi kullanın:

Aşağıdaki örnekte, hiyerarşik bir liste kullanılarak belirtilen kapsayıcıdaki bloblar listelenir:

public void listBlobsHierarchicalListing(BlobContainerClient blobContainerClient, String prefix/* ="" */) {
    String delimiter = "/";
    ListBlobsOptions options = new ListBlobsOptions()
            .setPrefix(prefix);

    blobContainerClient.listBlobsByHierarchy(delimiter, options, null)
            .forEach(blob -> {
                if (blob.isPrefix()) {
                    System.out.printf("Virtual directory prefix: %s%n", delimiter + blob.getName());
                    listBlobsHierarchicalListing(blobContainerClient, blob.getName());
                } else {
                    System.out.printf("Blob name: %s%n", blob.getName());
                }
            });
}

Örnek çıktı şuna benzer:

List blobs hierarchical:
Blob name: file4.txt
Virtual directory prefix: /folderA/
Blob name: folderA/file1.txt
Blob name: folderA/file2.txt
Virtual directory prefix: /folderA/folderB/
Blob name: folderA/folderB/file3.txt

Not

Blob anlık görüntüleri hiyerarşik listeleme işleminde listelenemez.

Kaynaklar

Java için Azure Blob Depolama istemci kitaplığını kullanarak blobları listeleme hakkında daha fazla bilgi edinmek için aşağıdaki kaynaklara bakın.

REST API işlemleri

Java için Azure SDK' sı, Azure REST API'sinin üzerine inşa edilerek rest API işlemleriyle alıştığınız Java paradigmalarıyla etkileşim kurmanızı sağlayan kitaplıklar içerir. Blobları listelemek için istemci kitaplığı yöntemleri aşağıdaki REST API işlemini kullanır:

Kod örnekleri

İstemci kitaplığı kaynakları

Ayrıca bkz.