Sdílet prostřednictvím


Použití Javy ke správě adresářů a souborů ve službě Azure Data Lake Storage Gen2

V tomto článku se dozvíte, jak pomocí Javy vytvářet a spravovat adresáře a soubory v účtech úložiště, které mají hierarchický obor názvů.

Informace o tom, jak získat, nastavit a aktualizovat seznamy řízení přístupu (ACL) adresářů a souborů, najdete v tématu Použití . Java pro správu seznamů ACL ve službě Azure Data Lake Storage Gen2

Referenční informace k rozhraní API pro balíčky | (Maven) | s referenčními informacemi | k mapování | Gen1 na Gen2

Požadavky

Nastavení projektu

Začněte tím, že otevřete tuto stránku a vyhledáte nejnovější verzi knihovny Java. Potom otevřete soubor pom.xml v textovém editoru. Přidejte prvek závislosti, který odkazuje na danou verzi.

Pokud plánujete ověřit klientskou aplikaci pomocí Microsoft Entra ID, přidejte závislost do knihovny Identit Azure. Další informace najdete v klientské knihovně Azure Identity pro Javu.

Dále přidejte tyto příkazy importu do souboru kódu.

import com.azure.identity.*;
import com.azure.storage.common.StorageSharedKeyCredential;
import com.azure.core.http.rest.PagedIterable;
import com.azure.core.util.BinaryData;
import com.azure.storage.file.datalake.*;
import com.azure.storage.file.datalake.models.*;
import com.azure.storage.file.datalake.options.*;

Poznámka:

Přístup k více protokolům ve službě Data Lake Storage umožňuje aplikacím používat rozhraní API objektů blob i rozhraní API Data Lake Storage Gen2 k práci s daty v účtech úložiště s povoleným hierarchickým oborem názvů (HNS). Při práci s funkcemi jedinečnými pro Data Lake Storage Gen2, jako jsou operace adresářů a seznamy ACL, použijte rozhraní API Data Lake Storage Gen2, jak je znázorněno v tomto článku.

Při volbě rozhraní API, která se mají použít v daném scénáři, zvažte úlohy a potřeby vaší aplikace spolu se známými problémy a dopadem HNS na úlohy a aplikace.

Autorizace přístupu a připojení k datovým prostředkům

Pokud chcete pracovat s příklady kódu v tomto článku, musíte vytvořit autorizovanou instanci DataLakeServiceClient , která představuje účet úložiště. Objekt můžete autorizovat DataLakeServiceClient pomocí MICROSOFT Entra ID, přístupového klíče účtu nebo sdíleného přístupového podpisu (SAS).

Klientskou knihovnu identit Azure pro Javu můžete použít k ověření vaší aplikace pomocí Microsoft Entra ID.

Vytvořte instanci DataLakeServiceClient a předejte novou instanci DefaultAzureCredential třídy.

static public DataLakeServiceClient GetDataLakeServiceClient(String accountName){
    DefaultAzureCredential defaultCredential = new DefaultAzureCredentialBuilder().build();

    DataLakeServiceClient dataLakeServiceClient = new DataLakeServiceClientBuilder()
        .endpoint("https://" + accountName + ".dfs.core.windows.net")
        .credential(defaultCredential)
        .buildClient();

    return dataLakeServiceClient;
}

Další informace o autorizaci DefaultAzureCredential přístupu k datům najdete v klientské knihovně Azure Identity pro Javu.

Vytvoření kontejneru

Kontejner funguje jako systém souborů. Kontejner můžete vytvořit pomocí následující metody:

Následující příklad kódu vytvoří kontejner a vrátí objekt DataLakeFileSystemClient pro pozdější použití:

public DataLakeFileSystemClient CreateFileSystem(
        DataLakeServiceClient serviceClient,
        String fileSystemName) {

    DataLakeFileSystemClient fileSystemClient = serviceClient.createFileSystem(fileSystemName);

    return fileSystemClient;
}

Vytvoření adresáře

Odkaz na adresář v kontejneru můžete vytvořit pomocí následující metody:

Následující příklad kódu přidá adresář do kontejneru a pak přidá podadresář a vrátí objekt DataLakeDirectoryClient pro pozdější použití:

public DataLakeDirectoryClient CreateDirectory(
        DataLakeFileSystemClient fileSystemClient,
        String directoryName,
        String subDirectoryName) {

    DataLakeDirectoryClient directoryClient = fileSystemClient.createDirectory(directoryName);

    return directoryClient.createSubdirectory(subDirectoryName);
}

Přejmenování nebo přesunutí adresáře

Adresář můžete přejmenovat nebo přesunout pomocí následující metody:

Jako parametr předejte cestu požadovaného adresáře. Následující příklad kódu ukazuje, jak přejmenovat podadresář:

public DataLakeDirectoryClient RenameDirectory(
        DataLakeFileSystemClient fileSystemClient,
        String directoryPath,
        String subdirectoryName,
        String subdirectoryNameNew) {

    DataLakeDirectoryClient directoryClient = fileSystemClient
            .getDirectoryClient(String.join("/", directoryPath, subdirectoryName));

    return directoryClient.rename(
            fileSystemClient.getFileSystemName(),
            String.join("/", directoryPath, subdirectoryNameNew));
}

Následující příklad kódu ukazuje, jak přesunout podadresář z jednoho adresáře do jiného adresáře:

public DataLakeDirectoryClient MoveDirectory(
        DataLakeFileSystemClient fileSystemClient,
        String directoryPathFrom,
        String directoryPathTo,
        String subdirectoryName) {

    DataLakeDirectoryClient directoryClient = fileSystemClient
            .getDirectoryClient(String.join("/", directoryPathFrom, subdirectoryName));

    return directoryClient.rename(
            fileSystemClient.getFileSystemName(),
            String.join("/", directoryPathTo, subdirectoryName));
}

Nahrání souboru do adresáře

Obsah můžete nahrát do nového nebo existujícího souboru pomocí následující metody:

Následující příklad kódu ukazuje, jak pomocí metody nahrát místní soubor do adresáře uploadFromFile :

public void UploadFile(
        DataLakeDirectoryClient directoryClient,
        String fileName) {

    DataLakeFileClient fileClient = directoryClient.getFileClient(fileName);

    fileClient.uploadFromFile("filePath/sample-file.txt");
}

Tuto metodu můžete použít k vytvoření a nahrání obsahu do nového souboru nebo můžete parametr nastavit overwrite tak, aby true přepsal existující soubor.

Připojení dat k souboru

Data, která se mají připojit k souboru, můžete nahrát pomocí následující metody:

Následující příklad kódu ukazuje, jak připojit data na konec souboru pomocí následujícího postupu:

  • Vytvořte DataLakeFileClient objekt představující prostředek souboru, se kterým pracujete.
  • Nahrajte data do souboru pomocí DataLakeFileClient.append metody.
  • Dokončete nahrávání voláním DataLakeFileClient.flush metody pro zápis dříve nahraných dat do souboru.
public void AppendDataToFile(
        DataLakeDirectoryClient directoryClient) {

    DataLakeFileClient fileClient = directoryClient.getFileClient("sample-file.txt");
    long fileSize = fileClient.getProperties().getFileSize();

    String sampleData = "Data to append to end of file";
    fileClient.append(BinaryData.fromString(sampleData), fileSize);

    fileClient.flush(fileSize + sampleData.length(), true);
}

Stažení z adresáře

Následující příklad kódu ukazuje, jak pomocí následujícího postupu stáhnout soubor z adresáře do místního souboru:

  • Vytvořte DataLakeFileClient objekt představující soubor, který chcete stáhnout.
  • DataLakeFileClient.readToFile Ke čtení souboru použijte metodu. Tento příklad nastaví overwrite parametr na true, který přepíše existující soubor.
public void DownloadFile(
        DataLakeDirectoryClient directoryClient,
        String fileName) {

    DataLakeFileClient fileClient = directoryClient.getFileClient(fileName);

    fileClient.readToFile("filePath/sample-file.txt", true);
}

Výpis obsahu adresáře

Obsah adresáře můžete zobrazit pomocí následující metody a vytvořit výčet výsledku:

Vytvoření výčtu cest ve výsledku může službě při načítání hodnot vyhovět více požadavků.

Následující příklad kódu vytiskne názvy každého souboru, který se nachází v adresáři:

public void ListFilesInDirectory(
        DataLakeFileSystemClient fileSystemClient,
        String directoryName) {

    ListPathsOptions options = new ListPathsOptions();
    options.setPath(directoryName);

    PagedIterable<PathItem> pagedIterable = fileSystemClient.listPaths(options, null);

    java.util.Iterator<PathItem> iterator = pagedIterable.iterator();
    PathItem item = iterator.next();

    while (item != null) {
        System.out.println(item.getName());

        if (!iterator.hasNext()) {
            break;
        }
        item = iterator.next();
    }

}

Odstranění adresáře

Adresář můžete odstranit pomocí jedné z následujících metod:

Následující příklad kódu používá deleteWithResponse k odstranění neprázdného adresáře a všech cest pod adresářem:

public void DeleteDirectory(
        DataLakeFileSystemClient fileSystemClient,
        String directoryName) {

    DataLakeDirectoryClient directoryClient = fileSystemClient.getDirectoryClient(directoryName);

    // Set to true to delete all paths beneath the directory
    boolean recursive = true;

    directoryClient.deleteWithResponse(recursive, null, null, null);
}

Viz také