Použití Javy ke správě adresářů a souborů ve službě Azure Data Lake Storage
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
Referenční informace k rozhraní API pro balíčky | (Maven) | s referenčními informacemi | k mapování | Gen1 na Gen2
Požadavky
Předplatné Azure. Další informace najdete v tématu Získání bezplatné zkušební verze Azure.
Účet úložiště s povoleným hierarchickým oborem názvů. Postupujte podle těchto pokynů a vytvořte ho.
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 natrue
, 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:
- DataLakeDirectoryClient.delete
- DataLakeDirectoryClient.deleteIfExists
- DataLakeDirectoryClient.deleteWithResponse
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);
}