Wyświetlanie listy obiektów blob za pomocą języka Java

W tym artykule przedstawiono sposób wyświetlania listy obiektów blob za pomocą biblioteki klienta usługi Azure Storage dla języka Java.

Wymagania wstępne

  • W tym artykule założono, że masz już skonfigurowany projekt do pracy z biblioteką klienta Azure Blob Storage dla języka Java. Aby dowiedzieć się więcej na temat konfigurowania projektu, w tym instalacji pakietu, dodawania import dyrektyw i tworzenia autoryzowanego obiektu klienta, zobacz Wprowadzenie do usług Azure Storage i Java.
  • Mechanizm autoryzacji musi mieć uprawnienia do wyświetlania listy obiektów blob. Aby dowiedzieć się więcej, zobacz wskazówki dotyczące autoryzacji dla następującej operacji interfejsu API REST:

Informacje o opcjach wyświetlania listy obiektów blob

Podczas wyświetlania listy obiektów blob z kodu można określić opcje zarządzania sposobem zwracania wyników z usługi Azure Storage. Można określić liczbę wyników do zwrócenia w każdym zestawie wyników, a następnie pobrać kolejne zestawy. Można określić prefiks do zwracania obiektów blob, których nazwy zaczynają się od tego znaku lub ciągu. Można również wyświetlać obiekty blob w płaskiej strukturze listy lub hierarchicznie. Hierarchiczna lista zwraca obiekty blob tak, jakby były zorganizowane w foldery.

Aby wyświetlić listę obiektów blob na koncie magazynu, wywołaj jedną z następujących metod:

Zarządzanie liczbą zwracanych wyników

Domyślnie operacja wyświetlania listy zwraca maksymalnie 5000 wyników jednocześnie, ale można określić liczbę wyników, które mają zostać zwrócone przez każdą operację wyświetlania listy. Przykłady przedstawione w tym artykule pokazują, jak zwracać wyniki na stronach. Aby dowiedzieć się więcej na temat pojęć związanych z stronicacją, zobacz Pagination with the Azure SDK for Java (Stronicowanie przy użyciu zestawu Azure SDK dla języka Java).

Filtrowanie wyników przy użyciu prefiksu

Aby filtrować listę obiektów blob, przekaż ciąg jako prefix parametr do listBlobsOptions.setPrefix(prefiks ciągu). Ciąg prefiksu może zawierać co najmniej jeden znak. Następnie usługa Azure Storage zwraca tylko obiekty blob, których nazwy zaczynają się od tego prefiksu.

Lista płaska a lista hierarchiczna

Obiekty blob w usłudze Azure Storage są zorganizowane w modelu płaskim, a nie w modelu hierarchicznym (na przykład w klasycznym systemie plików). Można jednak organizować obiekty blob w katalogi wirtualne , aby naśladować strukturę folderów. Katalog wirtualny stanowi część nazwy obiektu blob i jest wskazywany przez znak ogranicznika.

Aby zorganizować obiekty blob w katalogach wirtualnych, użyj znaku ogranicznika w nazwie obiektu blob. Domyślny znak ogranicznika to ukośnik (/), ale można określić dowolny znak jako ogranicznik.

Jeśli nazywasz obiekty blob za pomocą ogranicznika, możesz wybrać hierarchię wyświetlania listy obiektów blob. W przypadku operacji listy hierarchicznej usługa Azure Storage zwraca wszystkie katalogi wirtualne i obiekty blob pod obiektem nadrzędnym. Operację wyświetlania listy można wywołać cyklicznie, aby przejść przez hierarchię, podobnie jak w przypadku programowego przechodzenia przez klasyczny system plików.

Korzystanie z listy płaskiej

Domyślnie operacja wyświetlania listy zwraca obiekty blob na płaskiej liście. Na liście płaskiej obiekty blob nie są zorganizowane przez katalog wirtualny.

Poniższy przykład przedstawia listę obiektów blob w określonym kontenerze przy użyciu listy płaskiej:

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

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

Przykładowe dane wyjściowe są podobne do następujących:

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

Można również określić opcje filtrowania wyników listy lub wyświetlania dodatkowych informacji. W poniższym przykładzie wymieniono obiekty blob z określonym prefiksem, a także wymieniono usunięte obiekty blob:

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());
        });
    }
}

Przykładowe dane wyjściowe są podobne do następujących:

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

Uwaga

Pokazane przykładowe dane wyjściowe zakładają, że masz konto magazynu z płaską przestrzenią nazw. Jeśli włączono funkcję hierarchicznej przestrzeni nazw dla konta magazynu, katalogi nie są wirtualne. Zamiast tego są to betonowe, niezależne obiekty. W związku z tym katalogi są wyświetlane na liście jako obiekty blob o zerowej długości.

Aby uzyskać alternatywną opcję wyświetlania listy podczas pracy z hierarchiczną przestrzenią nazw, zobacz Wyświetlanie listy zawartości katalogu (Azure Data Lake Storage Gen2).

Używanie listy hierarchicznej

Po wywołaniu operacji listy hierarchicznie usługa Azure Storage zwraca katalogi wirtualne i obiekty blob na pierwszym poziomie hierarchii.

Aby wyświetlić hierarchicznie listę obiektów blob, użyj następującej metody:

W poniższym przykładzie wymieniono obiekty blob w określonym kontenerze przy użyciu listy hierarchicznej:

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());
                }
            });
}

Przykładowe dane wyjściowe są podobne do następujących:

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

Uwaga

Nie można wyświetlać migawek obiektów blob w operacji hierarchicznej listy.

Zasoby

Aby dowiedzieć się więcej na temat wyświetlania listy obiektów blob przy użyciu biblioteki klienta Azure Blob Storage dla języka Java, zobacz następujące zasoby.

Operacje interfejsu API REST

Zestaw Azure SDK dla języka Java zawiera biblioteki, które bazują na interfejsie API REST platformy Azure, co umożliwia interakcję z operacjami interfejsu API REST za pomocą znanych paradygmatów języka Java. Metody biblioteki klienta do wyświetlania listy obiektów blob używają następującej operacji interfejsu API REST:

Przykłady kodu

Zasoby biblioteki klienta

Zobacz też