Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Bu makale, Java için Azure Depolama istemci kitaplığı ile blobların nasıl listeleneceğini gösterir.
Önkoşullar
- Azure aboneliği - ücretsiz bir abonelik oluşturun
- Azure depolama hesabı - depolama hesabı oluşturma
- Java Development Kit (JDK) sürüm 8 veya üzeri (en iyi deneyim için sürüm 17'yi öneririz)
- Apache Maven bu örnekte proje yönetimi için kullanılır
Ortamınızı ayarlama
Mevcut bir projeniz yoksa, bu bölümde Java için Azure Blob Depolama istemci kitaplığıyla çalışmak üzere bir projenin nasıl ayarlanacağı gösterilir. Daha fazla bilgi için bkz. Azure Blob Depolama ve Java'yı kullanmaya başlama.
Bu makaledeki kod örnekleriyle çalışmak için projenizi ayarlamak için bu adımları izleyin.
Not
Bu makalede, örnek kodu derlemek ve çalıştırmak için Maven derleme aracı kullanılmaktadır. Gradle gibi diğer derleme araçları da Java için Azure SDK ile çalışır.
Paketleri yükleme
pom.xml Dosyayı metin düzenleyicinizde açın. Paketleri BOM dosyasını ekleyerek veya doğrudan bağımlılık ekleyerek yükleyin.
Import ifadeleri ekle
Aşağıdaki import deyimlerini ekleyin:
import com.azure.core.http.rest.*;
import com.azure.storage.blob.*;
import com.azure.storage.blob.models.*;
Yetkilendirme
Yetkilendirme mekanizması, bir blobu listelemek için gerekli izinlere sahip olmalıdır. Microsoft Entra ID ile yetkilendirme için (önerilir), Azure RBAC yerleşik rolü olan Storage Blob Data Reader veya daha yüksek bir role sahip olmanız gerekir. Daha fazla bilgi edinmek için Bkz. Liste Blobları (REST API) için yetkilendirme kılavuzu.
İstemci nesnesi oluşturma
Bir uygulamayı Blob Depolama'ya bağlamak için bir BlobServiceClient örneği oluşturun.
Aşağıdaki örnek, bir nesnesi oluşturmak için BlobServiceClient kullanır ve gerekirse kapsayıcı ve blob istemcilerinin nasıl oluşturulacağını gösterir.
// Azure SDK client builders accept the credential as a parameter
// TODO: Replace <storage-account-name> with your actual storage account name
BlobServiceClient blobServiceClient = new BlobServiceClientBuilder()
.endpoint("https://<storage-account-name>.blob.core.windows.net/")
.credential(new DefaultAzureCredentialBuilder().build())
.buildClient();
// If needed, you can create a BlobContainerClient object from the BlobServiceClient
BlobContainerClient containerClient = blobServiceClient
.getBlobContainerClient("<container-name>");
// If needed, you can create a BlobClient object from the BlobContainerClient
BlobClient blobClient = containerClient
.getBlobClient("<blob-name>");
İstemci nesneleri oluşturma ve yönetme hakkında daha fazla bilgi edinmek için bkz . Veri kaynaklarıyla etkileşim kuran istemci nesneleri oluşturma ve yönetme.
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:
Döndürülen sonuç sayısını yönetme
Varsayılan olarak, bir listeleme işlemi bir kerede en çok 5000 sonuç döndürür, ancak her listeleme işleminin döndürmesini istediğiniz sonuç sayısını belirtebilirsiniz. Bu makalede sunulan örnekler, sonuçları sayfalarda nasıl döndürebileceğinizi gösterir. 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 bir dizeyi prefixListBlobsOptions.setPrefix(String prefix)'e geçirin. Ön ek dizesi bir veya daha fazla karakter içerebilir. Azure Depolama daha sonra yalnızca adları bu ön ek ile başlayan blobları döndürür.
Düz listeleme ve hiyerarşik listeleme karşılaştırması
Azure Depolama'daki bloblar hiyerarşik paradigma (klasik dosya sistemi gibi) yerine düz bir paradigma içinde 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.
Bloblarınızı sınırlayıcı kullanarak 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. Hiyerarşide geçiş yapmak için listeleme işlemini yinelemeli olarak çağırabilirsiniz. Örneğin, klasik dosya sisteminde program aracılığıyla geçiş yapabilirsiniz.
Düz liste kullanma
Varsayılan olarak, listeleme işlemi düz bir listede bloblar döndürür. Düz bir listede bloblar sanal dizine göre düzenlenemez.
Aşağıdaki örnekte belirtilen kapsayıcıdaki bloblar düz liste kullanılarak listelenmektedir:
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 sonuçları filtrelemek veya daha fazla bilgi göstermek için seçenekler 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 isim alanı özelliğini etkinleştirirseniz, dizinler sanal değildir. Bunun yerine, somut, bağımsız nesnelerdir. Sonuç olarak, dizinler listede sıfır uzunlukta bloblar olarak görünür.
Hiyerarşik ad alanıyla çalışırken alternatif listeleme seçeneği için bkz . Dizin içeriğini listeleme (Azure Data Lake Storage).
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 örnek, hiyerarşik bir liste kullanarak belirtilen kapsayıcıdaki blobları listeler:
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 bir listeleme işleminde listelenemez.
Apache Arrow formatında liste blobları (önizleme)
Important
Apache Arrow formatında blobların listelenmesi şu anda PREVIEW'da. Bu senaryo, Java için Azure Blob Depolama istemci kütüphanesinin beta (önizleme) sürümünü gerektirir (örneğin, azure-storage-blob12.36.0-beta.1 veya daha sonraki önizleme sürümleri). Önizleme özellikleri hizmet düzeyi sözleşmesi olmadan sağlanır ve üretim iş yükleri için önerilmez. Bazı özellikler desteklenmeyebilir veya kısıtlı yeteneklere sahip olabilir. Daha fazla bilgi için bkz. Microsoft Azure Önizlemeleri için Ek Kullanım Koşulları.
Bu yetenek mevcut List Blobs API üzerine inşa edilmiştir. Varsayılan XML kullanmak yerine, tel üzerinde yanıt formatı olarak kompakt, sütunlu Apache Arrow formatını kullanır. Konteyner listeleme çağrısında tek bir seçenek ayarlayarak etkinleştirirsiniz. Java SDK, Apache Arrow'u perde arkasında çözer ve yine aynı BlobItem nesneleri geri getirir. Bu yaklaşım, listeleme verimliliğini artırır ve büyük konteynerler sıralanırken istemci tarafı CPU'yu azaltır. Başvuruların dayandığı yanıt sözleşmesini korur.
Warning
Apache Arrow formatında blobların listelenmesi, hiyerarşik namespace (Azure Data Lake Storage) etkin olan depolama hesaplarında desteklenmiyor.
Apache Arrow formatlı sonuç istemek için, ListBlobsOptions üzerinde yanıt serileştirme formatını StorageResponseSerializationFormat.ARROW olarak ayarlayın, setStorageResponseSerializationFormatardından seçenekleri BlobContainerClient.listBlobs'a iletin. Apache Arrow çıktısını kullanırken, geri döndürülen yolların aralığını denetlemek için setStartFrom ve setEndBefore öğelerini de çağırabilirsiniz.
Aşağıdaki örnek, bir konteynerdeki blobları listeler ve sonuçları Apache Arrow formatında ister:
ListBlobsOptions options = new ListBlobsOptions()
.setPrefix("folderA/")
.setStorageResponseSerializationFormat(StorageResponseSerializationFormat.ARROW);
for (BlobItem blobItem : containerClient.listBlobs(options, null)) {
System.out.println("Blob name: " + blobItem.getName());
}
Kaynaklar
Java için Azure Blob Depolama istemci kütüphanesini kullanarak blobları listelemek hakkında daha fazla bilgi edinmek için aşağıdaki kaynaklara bakabilirsiniz.
Kod örnekleri
REST API işlemleri
Azure SDK for Java, Azure REST API'si üzerine inşa edilen kütüphaneler içerir. Bu kütüphaneleri kullanarak, tanıdık Java paradigmaları aracılığıyla REST API işlemleriyle etkileşime girebilirsiniz. Blobları listelemek için istemci kitaplığı yöntemleri aşağıdaki REST API işlemini kullanır:
- Blobları Listeleme (REST API)
İstemci kitaplığı kaynakları
Ayrıca bkz.
İlgili içerik
- Bu makale, Java için Blob Depolama geliştirici kılavuzunun bir parçasıdır. Daha fazla bilgi edinmek için Build your Java app bölümündeki geliştirici kılavuzu makalelerinin tam listesine bakın.