Sdílet prostřednictvím


Vývoj pro Soubory Azure pomocí Javy

Naučte se vyvíjet aplikace v Javě, které k ukládání dat používají azure Files. Azure Files je spravovaná sdílená služba v cloudu. Poskytuje plně spravované sdílené složky, které jsou přístupné prostřednictvím standardních protokolů SMB (Server Message Block) a NFS (Network File System). Azure Files také poskytuje rozhraní REST API pro programový přístup ke sdíleným složkám.

V tomto článku se dozvíte o různých přístupech k vývoji pomocí azure Files v Javě a o tom, jak zvolit přístup, který nejlépe vyhovuje potřebám vaší aplikace. Dozvíte se také, jak vytvořit základní konzolovou aplikaci, která komunikuje s prostředky Azure Files.

Platí pro

Model správy Model fakturace Mediální vrstva Přebytečnost protokol SMB NFS
Microsoft.Storage Zprovozněno v2 HDD (standard) Místní (LRS) Ano Ne
Microsoft.Storage Zprovozněno v2 HDD (standard) Zóna (ZRS) Ano Ne
Microsoft.Storage Zprovozněno v2 HDD (standard) Geografie (GRS) Ano Ne
Microsoft.Storage Zprovozněno v2 HDD (standard) GeoZone (GZRS) Ano Ne
Microsoft.Storage Poskytnuto v1 SSD (Premium) Místní (LRS) Ano Ne
Microsoft.Storage Poskytnuto v1 SSD (Premium) Zóna (ZRS) Ano Ne
Microsoft.Storage Platba dle skutečné spotřeby HDD (standard) Místní (LRS) Ano Ne
Microsoft.Storage Platba dle skutečné spotřeby HDD (standard) Zóna (ZRS) Ano Ne
Microsoft.Storage Platba dle skutečné spotřeby HDD (standard) Geografie (GRS) Ano Ne
Microsoft.Storage Platba dle skutečné spotřeby HDD (standard) GeoZone (GZRS) Ano Ne

Informace o vývoji aplikací v Javě se službou Azure Files

Azure Files nabízí vývojářům v Javě několik způsobů přístupu k datům a správě prostředků v Azure Files. Následující tabulka uvádí přístupy, shrnuje jejich fungování a poskytuje pokyny k použití jednotlivých přístupů:

Přístup Jak to funguje Kdy používat
Standardní vstupně-výstupní knihovny souborů Používá volání rozhraní API na úrovni operačního systému prostřednictvím sdílených složek Azure připojených pomocí protokolu SMB nebo NFS. Když připojíte sdílenou složku pomocí protokolu SMB/NFS, můžete použít knihovny vstupně-výstupních operací souborů pro programovací jazyk nebo architekturu, jako java.io je a java.nio pro Javu. Máte aplikace pro firemní použití s existujícím kódem, který používá standardní vstupně-výstupní operace se soubory, a nechcete upravit kód aplikací, aby fungovaly se sdílenou složkou Azure.
FileREST API Přímé volání koncových bodů HTTPS pro interakci s daty uloženými ve službě Azure Files. Poskytuje programové řízení nad zdroji sdílených složek. Sada Azure SDK poskytuje klientskou knihovnu sdílených složek (com.azure.storage.file.share), která je založená na rozhraní FileREST API, což umožňuje interakci s operacemi rozhraní FileREST API prostřednictvím známých paradigmat programovacího jazyka Java. Vytváříte cloudové služby a aplikace přidané hodnotou pro zákazníky a chcete používat pokročilé funkce, které nejsou dostupné prostřednictvím standardních vstupně-výstupních knihoven souborů.
REST API poskytovatele pro úložiště Používá Azure Resource Manager (ARM) ke správě účtů úložiště a sdílených složek. Volá koncové body rozhraní REST API pro různé operace správy prostředků. Aplikace nebo služba musí provádět úlohy správy prostředků, jako je vytváření, odstraňování nebo aktualizace účtů úložiště nebo sdílených složek.

Obecné informace o těchto přístupech naleznete v Přehledu vývoje aplikací s Azure Files.

Tento článek se zaměřuje na práci s prostředky Azure Files s využitím následujících přístupů:

Požadavky

Nastavení prostředí

Poznámka:

Tento článek používá nástroj pro sestavení Maven k sestavení a spuštění ukázkového kódu. Další nástroje sestavení, jako je Gradle, také pracují se sadou Azure SDK pro Javu.

Pomocí Mavenu vytvořte novou konzolovou aplikaci nebo otevřete existující projekt. Podle těchto kroků nainstalujte balíčky a přidejte potřebné import direktivy.

Instalace balíčků

Otevřete soubor v textovém pom.xml editoru. Nainstalujte balíčky zahrnutím souboru BOM nebo zahrnutím přímé závislosti.

Přidejte BOM soubor

Přidejte azure-sdk-bom , abyste mohli využívat závislost na nejnovější verzi knihovny. V následujícím fragmentu {bom_version_to_target} kódu nahraďte zástupný symbol číslem verze. Použití azure-sdk-bom vás ušetří od nutnosti určovat verzi každé jednotlivé závislosti. Další informace o BOM najdete v dokumentaci Azure SDK BOM README.

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>com.azure</groupId>
            <artifactId>azure-sdk-bom</artifactId>
            <version>{bom_version_to_target}</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

Do skupiny závislostí přidejte následující prvky závislostí. Závislost azure-identity je potřebná pro připojení bez hesla ke službám Azure. Upozorňujeme, že artefakty Resource Manageru nejsou součástí souboru BOM, takže je musíte přidat jako přímé závislosti.

<dependency>
  <groupId>com.azure</groupId>
  <artifactId>azure-storage-file-share</artifactId>
</dependency>
<dependency>
  <groupId>com.azure</groupId>
  <artifactId>azure-identity</artifactId>
</dependency>
<dependency>
  <groupId>com.azure</groupId>
  <artifactId>azure-core-management</artifactId>
</dependency>
<dependency>
  <groupId>com.azure.resourcemanager</groupId>
  <artifactId>azure-resourcemanager</artifactId>
  <version>{package_version_to_target}</version>
</dependency>
<dependency>
  <groupId>com.azure.resourcemanager</groupId>
  <artifactId>azure-resourcemanager-storage</artifactId>
  <version>{package_version_to_target}</version>
</dependency>

Zahrnutí přímé závislosti

Pokud chcete mít závislost na konkrétní verzi knihovny, přidejte do projektu přímou závislost:

<dependency>
  <groupId>com.azure</groupId>
  <artifactId>azure-storage-file-share</artifactId>
  <version>{package_version_to_target}</version>
</dependency>
<dependency>
  <groupId>com.azure</groupId>
  <artifactId>azure-identity</artifactId>
  <version>{package_version_to_target}</version>
</dependency>
<dependency>
  <groupId>com.azure.resourcemanager</groupId>
  <artifactId>azure-resourcemanager</artifactId>
  <version>{package_version_to_target}</version>
</dependency>
<dependency>
  <groupId>com.azure.resourcemanager</groupId>
  <artifactId>azure-resourcemanager-storage</artifactId>
  <version>{package_version_to_target}</version>
</dependency>
<dependency>
  <groupId>com.azure</groupId>
  <artifactId>azure-core-management</artifactId>
  <version>{package_version_to_target}</version>
</dependency>

Zahrnout importní příkazy

Pak otevřete soubor kódu a přidejte potřebné import direktivy. V tomto příkladu přidáme do souboru App.java následující direktivy:

import com.azure.identity.*;
import com.azure.storage.file.share.*;
import com.azure.resourcemanager.*;
import com.azure.resourcemanager.storage.models.*;
import com.azure.core.management.*;
import com.azure.core.management.profile.*;

Pokud plánujete používat vstupně-výstupní knihovny souborů Java, musíte také přidat následující direktivy importu:

import java.io.*;
import java.nio.file.*;

Práce se soubory Azure pomocí vstupně-výstupních knihoven souborů Java

Standardní vstupně-výstupní knihovny souborů jsou nejběžnějším způsobem přístupu k prostředkům Azure Files a jejich práci. Když připojíte sdílenou složku pomocí protokolu SMB nebo NFS, váš operační systém přesměruje požadavky rozhraní API pro místní systém souborů. Tento přístup umožňuje používat standardní vstupně-výstupní knihovny souborů, jako například java.io a java.nio, pro interakci se soubory a adresáři ve sdílené složce.

Pokud vaše aplikace vyžaduje, zvažte použití vstupně-výstupních knihoven souborů Java:

  • Kompatibilita aplikací: Ideální pro obchodní aplikace s existujícím kódem, který už používá vstupně-výstupní knihovny souborů Java. Aby aplikace fungovala se sdílenou složkou Azure, nemusíte přepisovat kód.
  • Snadné použití: Vstupně-výstupní knihovny souborů Java jsou dobře známé vývojáři a snadno se používají. Návrh klíčové hodnoty služby Azure Files spočívá v tom, že zpřístupňuje nativní rozhraní API systému souborů prostřednictvím protokolu SMB a NFS.

V této části se dozvíte, jak používat vstupně-výstupní knihovny souborů Java pro práci s prostředky Azure Files.

Další informace a příklady najdete v následujícím zdroji.

Připojit sdílenou složku

Pokud chcete použít vstupně-výstupní knihovny souborů Java, musíte nejprve připojit sdílenou složku. Pokyny k připojení sdílené složky pomocí protokolu SMB nebo NFS najdete v následujících zdrojích informací:

V tomto článku používáme následující cestu pro odkaz na připojenou sdílenou složku SMB ve Windows:

String fileSharePath = "Z:\\file-share";

Příklad: Připojení ke sdílené složce a vytvoření výčtu adresářů pomocí vstupně-výstupních knihoven souborů Java

Následující příklad kódu ukazuje, jak se připojit ke sdílené složce a zobrazit seznam adresářů ve sdílené složce:

import java.io.*;
import java.nio.file.*;

// Add the following code to a new or existing function

String fileSharePath = "Z:\\file-share";

try {
    File directory = new File(fileSharePath);
    File[] dirs = directory.listFiles(File::isDirectory);
            
    if (dirs != null) {
        for (File dir : dirs) {
            System.out.println(dir.getName());
        }
        System.out.println(dirs.length + " directories found.");
    }
} catch (Exception e) {
    System.out.println("Error: " + e.getMessage());
}

Příklad: Zápis do souboru ve sdílené složce pomocí vstupně-výstupních knihoven souborů Java

Následující příklad kódu ukazuje, jak zapisovat a připojovat text k souboru:

import java.io.*;
import java.nio.file.*;
import java.util.Arrays;

// Add the following code to a new or existing function

String fileSharePath = "Z:\\file-share";
String fileName = "test.txt";

try {
    String textToWrite = "First line" + System.lineSeparator();
    Path filePath = Paths.get(fileSharePath, fileName);
        
    // Write initial content to file
    Files.write(filePath, textToWrite.getBytes());
    System.out.println("Initial text written to file");
        
    // Append additional lines to the file
    String[] textToAppend = { "Second line", "Third line" };
    Files.write(filePath, 
                Arrays.asList(textToAppend),
                StandardOpenOption.APPEND);
    System.out.println("Additional lines appended to file");
} catch (IOException ex) {
    System.out.println("Error writing to file: " + ex.getMessage());
}

Příklad: Uzamčení souboru ve sdílené složce pomocí vstupně-výstupních knihoven souborů Java

Klienti SMB, kteří připojují sdílení souborů, mohou používat mechanismy uzamčení souborového systému k řízení přístupu ke sdíleným souborům.

Následující příklad kódu ukazuje, jak zamknout soubor ve sdílené složce:

import java.io.*;
import java.nio.channels.FileChannel;
import java.nio.channels.FileLock;
import java.nio.file.*;

// Add the following code to a new or existing function

String fileSharePath = "Z:\\file-share";
String fileName = "test.txt";
String filePath = Paths.get(fileSharePath, fileName).toString();

try (
    FileOutputStream fos = new FileOutputStream(filePath);
    FileChannel fileChannel = fos.getChannel()) {

    // Acquire an exclusive lock on this file
    FileLock lock = fileChannel.lock();

    System.out.println("File is locked.");

    // Perform file operations here

    // Release the lock
    lock.release();
    System.out.println("File lock released.");

} catch (Exception e) {
    e.printStackTrace();
}

Při použití protokolu SMB i FileREST API mějte na paměti, že FileREST API používá ke správě zámků souborů leasing, zatímco SMB používá zámky systému souborů spravované operačním systémem. Další informace o správě interakcí uzamčení souborů mezi protokolem SMB a rozhraním FileREST API najdete v tématu Správa zámků souborů.

Příklad: Výčet seznamů ACL souborů pomocí vstupně-výstupních knihoven souborů Java

Následující příklad kódu ukazuje, jak vypsat seznamy řízení přístupu (ACL) pro soubor:

import java.nio.file.*;
import java.nio.file.attribute.AclEntry;
import java.nio.file.attribute.AclFileAttributeView;
import java.util.List;

// Add the following code to a new or existing function

String fileSharePath = "Z:\\file-share";
String fileName = "test.txt";
String filePath = Paths.get(fileSharePath, fileName).toString();

try {
    Path path = Paths.get(filePath);

    // Get the ACL view for the file
    AclFileAttributeView aclView = Files.getFileAttributeView(
            path, AclFileAttributeView.class);

    // Get the ACL entries
    List<AclEntry> aclEntries = aclView.getAcl();

    // List all access rules for the file
    for (AclEntry entry : aclEntries) {
        System.out.println("Identity: " + entry.principal().getName());
        System.out.println("Access Control Type: " + entry.type());
        System.out.println("File System Rights: " + entry.permissions());
        System.out.println();
    }

    System.out.println(aclEntries.size() + " ACL entries found.");
} catch (Exception ex) {
    System.out.println("Error: " + ex.getMessage());
}

Práce se službou Azure Files pomocí klientské knihovny sdílených složek pro Javu

Rozhraní FileREST API poskytuje programový přístup ke službě Azure Files. Umožňuje volat koncové body HTTPS, které provádějí operace se sdílenými složkami, adresáři a soubory. Rozhraní FileREST API je navržené pro vysokou škálovatelnost a pokročilé funkce, které nemusí být dostupné prostřednictvím nativních protokolů. Sada Azure SDK poskytuje klientské knihovny, jako je klientská knihovna sdílených složek pro Javu, která vychází z rozhraní FileREST API.

Pokud vaše aplikace vyžaduje, zvažte použití rozhraní FileREST API a klientské knihovny sdílené složky:

  • Pokročilé funkce: Přístup k operacím a funkcím, které nejsou dostupné prostřednictvím nativních protokolů.
  • Vlastní integrace cloudu: Vytvářejte vlastní služby přidané hodnotou, jako je zálohování, antivirový program nebo správa dat, které komunikují přímo se službou Azure Files.
  • Optimalizace výkonu: Využijte výhod výkonu ve scénářích s vysokým měřítkem pomocí operací roviny dat.

Rozhraní FileREST API modeluje Soubory Azure jako hierarchii prostředků a doporučuje se pro operace prováděné na úrovni adresáře nebo souboru . Pro operace prováděné na úrovni souborové služby nebo sdílené složky byste měli preferovat rozhraní REST API poskytovatele prostředků úložiště.

V této části se dozvíte, jak používat klientskou knihovnu Sdílených složek pro Javu k práci s prostředky azure Files.

Další informace a příklady najdete v následujících zdrojích informací:

Autorizace přístupu a vytvoření klienta

Pokud chcete připojit aplikaci ke službě Azure Files, vytvořte ShareClient objekt. Tento objekt je vaším výchozím bodem pro práci s prostředky Azure Files. Následující příklady kódu ukazují, jak vytvořit ShareClient objekt pomocí různých mechanismů autorizace.

Chcete-li se autorizovat pomocí ID Microsoft Entra, budete muset použít objekt zabezpečení. Jaký typ objektu zabezpečení potřebujete, závisí na tom, kde vaše aplikace běží. Chcete-li se dozvědět více o scénářích autentizace, podívejte se na Azure autentizace s Java a Azure Identity.

Pokud chcete pracovat s příklady kódu v tomto článku, přiřaďte k objektu zabezpečení předdefinovanou roli Storage File Data Privileged Contributor v rámci Azure RBAC. Tato role poskytuje úplný přístup ke čtení, zápisu, úpravě seznamů ACL a odstraňování všech dat ve sdílených složkách pro všechny nakonfigurované účty úložiště bez ohledu na nastavená oprávnění NTFS na úrovni souboru nebo adresáře. Další informace najdete v tématu Přístup ke sdíleným složkám Azure pomocí ID Microsoft Entra s OAuth služby Azure Files přes REST.

Autorizace přístupu pomocí DefaultAzureCredential

Snadným a bezpečným způsobem autorizace přístupu a připojení ke službě Azure Files je získání tokenu OAuth vytvořením instance DefaultAzureCredential . Tyto přihlašovací údaje pak můžete použít k vytvoření objektu ShareClient .

Následující příklad vytvoří ShareClient objekt autorizovaný pomocí DefaultAzureCredentiala pak vytvoří ShareDirectoryClient objekt pro práci s adresářem ve sdílené složce:

import com.azure.core.credential.TokenCredential;
import com.azure.identity.DefaultAzureCredentialBuilder;
import com.azure.storage.file.share.*;

// Add the following code to a new or existing function

String accountName = "<account-name>";
String shareName = "<share-name>";
TokenCredential defaultAzureCredential = new DefaultAzureCredentialBuilder().build();

// Create the ShareClient
ShareClient shareClient = new ShareClientBuilder()
    .endpoint(String.format("https://%s.file.core.windows.net", accountName))
    .shareName(shareName)
    .credential(defaultAzureCredential)
    .buildClient();

// Create a client to interact with a directory in the share
ShareDirectoryClient directoryClient = shareClient.getDirectoryClient("sample-directory");

Pokud přesně víte, jaký typ přihlašovacích údajů používáte k ověřování uživatelů, můžete token OAuth získat pomocí jiných tříd v klientské knihovně identit Azure pro Javu. Tyto třídy jsou odvozeny z TokenCredential třídy.

Další informace o každém z těchto mechanismů autorizace najdete v tématu Volba způsobu autorizace přístupu k datům souborů.

Příklad: Kopírování souborů pomocí klientské knihovny sdílených složek

Soubory ve sdílené složce nebo mezi sdílenými složkami můžete kopírovat pomocí následující metody:

Pomocí následující metody z objektu BlockBlobClient můžete zkopírovat soubor do cílového objektu blob.

Následující příklad kódu ukazuje, jak zkopírovat soubor do souboru v jiné sdílené složce:

import java.time.*;
import java.util.*;

import com.azure.core.credential.TokenCredential;
import com.azure.core.util.polling.*;
import com.azure.identity.DefaultAzureCredentialBuilder;
import com.azure.storage.file.share.*;
import com.azure.storage.file.share.models.*;

// Add the following code to a new or existing function

String accountName = "<account-name>";
String srcShareName = "src-file-share";
String destShareName = "dest-file-share";
String srcFilePath = "src/path/to/file";
String destFilePath = "dest/path/to/file";

TokenCredential tokenCredential = new DefaultAzureCredentialBuilder().build();

ShareFileClient srcShareFileClient = new ShareFileClientBuilder()
    .endpoint(String.format("https://%s.file.core.windows.net", accountName))
    .shareName(srcShareName)
    .shareTokenIntent(ShareTokenIntent.BACKUP)
    .resourcePath(srcFilePath)
    .credential(defaultAzureCredential)
    .buildFileClient();

ShareFileClient destShareFileClient = new ShareFileClientBuilder()
    .endpoint(String.format("https://%s.file.core.windows.net", accountName))
    .shareName(destShareName)
    .shareTokenIntent(ShareTokenIntent.BACKUP)
    .resourcePath(destFilePath)
    .credential(defaultAzureCredential)
    .buildFileClient();

// Copy the file from the source share to the destination share
SyncPoller<ShareFileCopyInfo, Void> poller = destShareFileClient
        .beginCopy(srcShareFileClient.getFileUrl(),
                Collections.singletonMap("file", "metadata"),
                Duration.ofSeconds(2));

final PollResponse<ShareFileCopyInfo> pollResponse = poller.poll();
final ShareFileCopyInfo value = pollResponse.getValue();
System.out.printf("Copy source: %s. Status: %s.%n", value.getCopySourceUrl(), value.getCopyStatus());

Příklad: Zapůjčení souboru pomocí klientské knihovny sdílených složek

Pronájem vytvoří zámek v souboru, který je spravován Azure prostřednictvím ID pronájmu. Zapůjčení poskytuje mechanismus pro koordinaci přístupu k souborům napříč více klienty v distribuovaném systému. Zapůjčení souboru poskytuje výhradní přístup k zápisu a odstranění. Další informace o stavech a akcích zapůjčení najdete v tématu Soubor zapůjčení.

Následující příklad kódu ukazuje, jak vytvořit klienta zapůjčení, získat nekonečnou dobu zapůjčení souboru a uvolnit zapůjčení:

import com.azure.core.credential.TokenCredential;
import com.azure.identity.DefaultAzureCredentialBuilder;
import com.azure.storage.file.share.*;
import com.azure.storage.file.share.models.*;
import com.azure.storage.file.share.specialized.*;

// Add the following code to a new or existing function

String accountName = "<account-name>";
String shareName = "sample-file-share";
String filePath = "path/to/file";
        
TokenCredential defaultAzureCredential = new DefaultAzureCredentialBuilder().build();

ShareFileClient fileClient = new ShareFileClientBuilder()
    .endpoint(String.format("https://%s.file.core.windows.net", accountName))
    .shareName(shareName)
    .shareTokenIntent(ShareTokenIntent.BACKUP)
    .resourcePath(filePath)
    .credential(defaultAzureCredential)
    .buildFileClient();

// Get a ShareLeaseClient
ShareLeaseClient fileLeaseClient = new ShareLeaseClientBuilder()
        .fileClient(fileClient)
        .shareTokenIntent(ShareTokenIntent.BACKUP)
        .buildClient();
        
try {
    // Acquire a lease on the file with infinite duration
    fileLeaseClient.acquireLease();
    System.out.println("Lease acquired successfully");
            
    // Do something with the file

} catch (Exception e) {
    System.err.println("Error: " + e.getMessage());
} finally {
    // Release the lease when finished
    try {
        fileLeaseClient.releaseLease();
        System.out.println("Lease released successfully.");
    } catch (Exception e) {
        System.err.println(e.getMessage());
    }
}

Při použití protokolu SMB i FileREST API mějte na paměti, že FileREST API používá ke správě zámků souborů leasing, zatímco SMB používá zámky systému souborů spravované operačním systémem. Další informace o správě interakcí uzamčení souborů mezi protokolem SMB a rozhraním FileREST API najdete v tématu Správa zámků souborů.

Příklad: Vytvoření a výpis snímků sdílených složek pomocí klientské knihovny sdílených složek

Snímky sdílených souborů jsou kopie sdílení souborů pouze pro čtení v určitém okamžiku. Můžete vytvořit snímek sdílené složky a pak pomocí snímku získat přístup k datům ve sdílené složce v okamžiku vytvoření snímku. Můžete také zobrazit seznam všech snímků ve sdílené složce a odstranit snímky sdílené složky.

Následující příklad kódu ukazuje, jak vytvořit snímek sdílení, jak vypsat snímky ve sdílené složce a jak procházet strom adresářů ve snímku sdílení.

import com.azure.storage.file.share.*;
import com.azure.storage.file.share.models.*;

// Add the following code to a new or existing function

public static void main(String[] args) {
    String connectionString = "<connection-string>";

    // Create a ShareServiceClient from which you can create clients for specific shares
    ShareServiceClient shareServiceClient = new ShareServiceClientBuilder()
    .connectionString(connectionString)
        .buildClient();
        
    // Get a client for a specific share
    ShareClient shareClient = shareServiceClient.getShareClient("sample-file-share");

    try {
        // Create a snapshot
        ShareSnapshotInfo snapshotInfo = shareClient.createSnapshot();
        System.out.println("Snapshot created: " + snapshotInfo.getSnapshot());

        // List snapshots in a share
        ListSharesOptions options = new ListSharesOptions()
            .setIncludeSnapshots(true);
                
        for (ShareItem shareItem : shareServiceClient.listShares(options, null, null)) {
            if (shareItem.getSnapshot() != null) {
                System.out.println("Share: " + shareItem.getName() + 
                    " (Snapshot: " + shareItem.getSnapshot() + ")");
            }
        }

        // List directories and files in a share snapshot
        String snapshotTimestamp = snapshotInfo.getSnapshot();
        ShareClient shareSnapshot = shareClient.getSnapshotClient(snapshotTimestamp);
        ShareDirectoryClient rootDir = shareSnapshot.getRootDirectoryClient();

        listDirectoryTree(rootDir);
            
    } catch (Exception e) {
        System.err.println("Error: " + e.getMessage());
    }
 }
    
private static void listDirectoryTree(ShareDirectoryClient directory) {
    // List all files and directories in current directory
    for (ShareFileItem fileItem : directory.listFilesAndDirectories()) {
        if (fileItem.isDirectory()) {
            System.out.println("Directory: " + fileItem.getName());
            // Recursively list subdirectory contents
            listDirectoryTree(directory.getSubdirectoryClient(fileItem.getName()));
        } else {
            System.out.println("File: " + fileItem.getName());
        }
    }
}

Poznámka:

Tokeny OAuth, jako jsou tokeny získané při použití DefaultAzureCredential, nejsou povolené pro operace roviny dat na úrovni sdílené složky. Aby bylo možné pracovat se snímky sdílených složek, musí být klientský objekt autorizovaný pomocí klíče účtu. Objekt ShareClient vytvořený v tomto příkladu kódu používá připojovací řetězec, který obsahuje klíč účtu.

Ukládání klíčů účtu nebo připojovacích řetězců představuje bezpečnostní riziko. Měli byste je použít jenom v případě, že ověřování Microsoft Entra není k dispozici. Další informace o bezpečném ukládání klíčů účtu ve službě Azure Key Vault najdete v tématu O klíčích účtu spravovaného úložiště služby Azure Key Vault.

Správa prostředků Azure Files pomocí knihoven pro správu služby Azure Storage

Knihovny pro správu úložiště Azure jsou postaveny na REST API poskytovatele prostředků úložiště Azure. Poskytovatel prostředků Azure Storage je služba založená na Azure Resource Manageru a podporuje deklarativní (šablony) i imperativní (přímé volání rozhraní API). Rozhraní REST API poskytovatele prostředků Azure Storage poskytuje programový přístup k prostředkům azure Storage, včetně sdílených složek. Sada Azure SDK poskytuje knihovny pro správu, které vycházejí z rozhraní REST API poskytovatele prostředků Azure Storage.

Knihovny pro správu se doporučují pro operace prováděné na úrovni souborové služby nebo sdílené složky . V této části se dozvíte, jak používat knihovny pro správu služby Azure Storage ke správě prostředků Azure Files.

Knihovny pro správu úložiště Azure jsou postaveny na REST API poskytovatele prostředků úložiště Azure. Poskytovatel prostředků Azure Storage je služba založená na Azure Resource Manageru a podporuje deklarativní (šablony) i imperativní (přímé volání rozhraní API). Rozhraní REST API poskytovatele prostředků Azure Storage poskytuje programový přístup k prostředkům azure Storage, včetně sdílených složek. Sada Azure SDK poskytuje knihovny pro správu, které vycházejí z rozhraní REST API poskytovatele prostředků Azure Storage.

Knihovny pro správu se doporučují pro operace prováděné na úrovni souborové služby nebo sdílené složky . V této části se dozvíte, jak používat knihovny pro správu služby Azure Storage ke správě prostředků Azure Files.

Příklad: Vytvoření sdílené složky pomocí knihovny pro správu Azure Storage

Následující příklad kódu ukazuje, jak vytvořit objekt nejvyšší úrovně AzureResourceManager , zaregistrovat poskytovatele prostředků úložiště s předplatným a vytvořit sdílenou složku pomocí knihovny pro správu Azure Storage:

import com.azure.identity.*;
import com.azure.resourcemanager.*;
import com.azure.resourcemanager.storage.fluent.*;
import com.azure.resourcemanager.storage.fluent.models.*;

import com.azure.core.credential.TokenCredential;
import com.azure.core.management.*;
import com.azure.core.management.profile.*;

// Add the following code to a new or existing function

String subscriptionID = "<subscription-id>";
String rgName = "<resource-group-name>";
String saName = "<storage-account-name>";
TokenCredential credential = new DefaultAzureCredentialBuilder().build();
AzureProfile profile = new AzureProfile(AzureEnvironment.AZURE);

AzureResourceManager armClient = AzureResourceManager
        .configure()
        .authenticate(credential, profile)
        .withSubscription(subscriptionID);

// Check the registration state of the resource provider and register, if needed
if (armClient.providers().getByName("Microsoft.Storage").registrationState() == "NotRegistered")
    armClient.providers().register("Microsoft.Storage");

// Create a new file share

StorageManagementClient storageManagementClient = armClient.storageAccounts().manager().serviceClient();
FileSharesClient fileShare = storageManagementClient.getFileShares();

String shareName = "sample-file-share";
int quotaInGB = 1;
        
// Create the file share
fileShare.create(
    rgName,
    saName,
    shareName,
    new FileShareInner()
        .withShareQuota(quotaInGB)
);

Vlastnosti sdílené složky můžete nakonfigurovat pomocí třídy FileShareInner . Předchozí příklad ukazuje, jak nastavit kvótu sdílené složky při vytváření sdílené složky. Chcete-li aktualizovat existující sdílenou složku, zavolejte fileShare.update() a předejte FileShareInner objekt s vlastnostmi, které chcete aktualizovat.

Poznámka:

K provedení operace registrace potřebujete oprávnění pro následující akci Azure RBAC: Microsoft.Storage/register/action. Toto oprávnění je součástí předdefinovaných rolí Přispěvatel a Vlastník.

Příklad: Výpis sdílených složek a snímků pomocí knihovny pro správu Azure Storage

Následující příklad kódu ukazuje, jak zobrazit seznam sdílených složek a snímků v účtu úložiště:

import com.azure.identity.*;
import com.azure.resourcemanager.*;
import com.azure.resourcemanager.storage.fluent.*;
import com.azure.resourcemanager.storage.fluent.models.*;

import com.azure.core.credential.TokenCredential;
import com.azure.core.http.rest.PagedIterable;
import com.azure.core.management.*;
import com.azure.core.management.profile.*;
import com.azure.core.util.Context;

// Add the following code to a new or existing function

String subscriptionID = "<subscription-id>";
String rgName = "<resource-group-name>";
String saName = "<storage-account-name>";
TokenCredential credential = new DefaultAzureCredentialBuilder().build();
AzureProfile profile = new AzureProfile(AzureEnvironment.AZURE);

AzureResourceManager armClient = AzureResourceManager
        .configure()
        .authenticate(credential, profile)
        .withSubscription(subscriptionID);

// Check the registration state of the resource provider and register, if needed
if (armClient.providers().getByName("Microsoft.Storage").registrationState() == "NotRegistered")
    armClient.providers().register("Microsoft.Storage");

StorageManagementClient storageManagementClient = armClient.storageAccounts().manager().serviceClient();
FileSharesClient fileShare = storageManagementClient.getFileShares();

// List all file shares and include snapshots

PagedIterable<FileShareItemInner> fileShares = fileShare.list(
    rgName,               // resource group name
    saName,               // storage account name
    null,                 // maxpagesize
    null,                 // filter
    "snapshots",          // expand to include snapshots
    Context.NONE);        // context

for (FileShareItemInner fileShareItem : fileShares) {
    System.out.println("File share name: " + fileShareItem.name());
    System.out.println("File share quota: " + fileShareItem.shareQuota());
}

Další kroky

Další informace o vývoji pomocí služby Azure Files najdete v následujících zdrojích informací: