Delen via


Ontwikkelen voor Azure Files met Java

Meer informatie over het ontwikkelen van Java-toepassingen die gebruikmaken van Azure Files om gegevens op te slaan. Azure Files is een beheerde bestandsshareservice in de cloud. Het biedt volledig beheerde bestandsshares die toegankelijk zijn via de industriestandaard SMB-protocollen (Server Message Block) en Network File System (NFS). Azure Files biedt ook een REST API voor programmatische toegang tot bestandsshares.

In dit artikel leert u meer over de verschillende benaderingen voor het ontwikkelen met Azure Files in Java en hoe u de aanpak kiest die het beste past bij de behoeften van uw app. U leert ook hoe u een eenvoudige console-app maakt die communiceert met Azure Files-resources.

Van toepassing op

Beheermodel Betaalmodel Medianiveau Redundantie KMO (SMB) NFS
Microsoft.Storage Geconfigureerd v2 HDD (standaard) Lokaal (LRS) Ja Nee
Microsoft.Storage Geconfigureerd v2 HDD (standaard) Zone (ZRS) Ja Nee
Microsoft.Storage Geconfigureerd v2 HDD (standaard) Aardrijkskunde (GRS) Ja Nee
Microsoft.Storage Geconfigureerd v2 HDD (standaard) GeoZone (GZRS) Ja Nee
Microsoft.Storage Geconfigureerd v1 SSD (van hoge kwaliteit) Lokaal (LRS) Ja Nee
Microsoft.Storage Geconfigureerd v1 SSD (van hoge kwaliteit) Zone (ZRS) Ja Nee
Microsoft.Storage Betaal naar verbruik HDD (standaard) Lokaal (LRS) Ja Nee
Microsoft.Storage Betaal naar verbruik HDD (standaard) Zone (ZRS) Ja Nee
Microsoft.Storage Betaal naar verbruik HDD (standaard) Aardrijkskunde (GRS) Ja Nee
Microsoft.Storage Betaal naar verbruik HDD (standaard) GeoZone (GZRS) Ja Nee

Over java-app-ontwikkeling met Azure Files

Azure Files biedt verschillende manieren voor Java-ontwikkelaars voor toegang tot gegevens en het beheren van resources in Azure Files. De volgende tabel bevat de benaderingen, geeft een overzicht van hoe ze werken en biedt richtlijnen voor het gebruik van elke benadering:

Methode Hoe het werkt Wanneer te gebruiken
Standaard-I/O-bibliotheken voor bestanden Maakt gebruik van API-aanroepen op besturingssysteemniveau via Azure-bestandsshares die zijn gekoppeld met behulp van SMB of NFS. Wanneer u een bestandsshare koppelt met behulp van SMB/NFS, kunt u I/O-bibliotheken voor bestanden gebruiken voor een programmeertaal of framework, zoals java.io en java.nio voor Java. U hebt line-of-business-apps met bestaande code die gebruikmaakt van standaardbestands-I/O en u wilt geen code herschrijven voor de app om te werken met een Azure-bestandsshare.
FileREST-API Roept HTTPS-eindpunten rechtstreeks aan om te communiceren met gegevens die zijn opgeslagen in Azure Files. Biedt programmatische controle over middelen voor bestandsdeling. De Azure SDK biedt de clientbibliotheek voor bestandsshares (com.azure.storage.file.share) die voortbouwt op de FileREST-API, zodat u kunt communiceren met FileREST API-bewerkingen via bekende Java-programmeertaalparadigma's. U bouwt toegevoegde cloudservices en -apps voor klanten en u wilt geavanceerde functies gebruiken die niet beschikbaar zijn via standaard-I/O-bibliotheken voor bestanden.
REST API voor opslagresource-provider Maakt gebruik van Azure Resource Manager (ARM) voor het beheren van opslagaccounts en bestandsshares. Roept REST API-eindpunten aan voor verschillende resourcebeheerbewerkingen. Uw app of service moet resourcebeheertaken uitvoeren, zoals het maken, verwijderen of bijwerken van opslagaccounts of bestandsshares.

Zie Overzicht van de ontwikkeling van toepassingen met Azure Files voor algemene informatie over deze benaderingen.

Dit artikel is gericht op het werken met Azure Files-resources met behulp van de volgende methoden:

Vereiste voorwaarden

Uw omgeving instellen

Opmerking

In dit artikel wordt het Maven-buildhulpprogramma gebruikt om de voorbeeldcode te bouwen en uit te voeren. Andere buildhulpprogramma's, zoals Gradle, werken ook met de Azure SDK voor Java.

Gebruik Maven om een nieuwe console-app te maken of een bestaand project te openen. Volg deze stappen om pakketten te installeren en de benodigde import instructies toe te voegen.

Pakketten installeren

Open het pom.xml bestand in de teksteditor. Installeer de pakketten door het BOM-bestand te includeren, of een directe afhankelijkheid op te nemen.

Het BOM-bestand opnemen

Voeg azure-sdk-bom toe om afhankelijk te zijn van de nieuwste versie van de bibliotheek. Vervang in het volgende codefragment de {bom_version_to_target} tijdelijke aanduiding door het versienummer. Als u azure-sdk-bom gebruikt, hoeft u niet de versie van elke afzonderlijke afhankelijkheid op te geven. Zie de Azure SDK BOM README voor meer informatie over de BOM.

<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>

Voeg de volgende afhankelijkheidselementen toe aan de groep met afhankelijkheden. De azure-identity-afhankelijkheid is nodig voor verbindingen zonder wachtwoord met Azure-services. Houd er rekening mee dat de Resource Manager-artefacten niet zijn opgenomen in het BOM-bestand, dus u moet ze toevoegen als directe afhankelijkheden.

<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>

Een directe afhankelijkheid opnemen

Als u afhankelijk wilt zijn van een bepaalde versie van de bibliotheek, voegt u de directe afhankelijkheid toe aan uw project:

<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>

Importrichtlijnen opnemen

Open vervolgens het codebestand en voeg de benodigde import instructies toe. In dit voorbeeld voegen we de volgende instructies toe in het bestand App.java :

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.*;

Als u van plan bent de I/O-bibliotheken van het Java-bestand te gebruiken, moet u ook de volgende importrichtlijnen toevoegen:

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

Werken met Azure Files met I/O-bibliotheken voor Java-bestanden

Standaard-I/O-bibliotheken voor bestanden zijn de meest voorkomende manier om azure Files-resources te openen en te gebruiken. Wanneer u een bestandsdeling koppelt met behulp van SMB of NFS, leidt uw besturingssysteem API-aanvragen om naar het lokale bestandssysteem. Met deze methode kunt u standaard I/O-bibliotheken voor bestanden gebruiken, zoals java.io en java.nio, om te communiceren met bestanden en mappen in de share.

Overweeg het gebruik van I/O-bibliotheken voor Java-bestanden wanneer uw app vereist:

  • App-compatibiliteit: Ideaal voor Line-Of-Business-apps met bestaande code die al I/O-bibliotheken van Java-bestanden gebruikt. U hoeft code niet opnieuw te schrijven om de app te laten werken met een Azure-bestandsshare.
  • Gebruiksgemak: I/O-bibliotheken voor Java-bestanden zijn bekend door ontwikkelaars en eenvoudig te gebruiken. Een belangrijke waardepropositie van Azure Files is dat het systeemeigen bestandssysteem-API's beschikbaar maakt via SMB en NFS.

In deze sectie leert u hoe u I/O-bibliotheken van Java-bestanden gebruikt om te werken met Azure Files-resources.

Zie de volgende resource voor meer informatie en voorbeelden:

Een bestandsshare koppelen

Als u I/O-bibliotheken voor Java-bestanden wilt gebruiken, moet u eerst een bestandsshare koppelen. Zie de volgende bronnen voor hulp bij het koppelen van een bestandsshare met behulp van SMB of NFS:

In dit artikel gebruiken we het volgende pad om te verwijzen naar een gekoppelde SMB-bestandsshare in Windows:

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

Voorbeeld: Verbinding maken met een bestandsshare en mappen inventariseren met behulp van I/O-bibliotheken voor Java-bestanden

In het volgende codevoorbeeld ziet u hoe u verbinding maakt met een bestandsshare en hoe u de mappen in de share weergeeft:

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

Voorbeeld: Schrijven naar een bestand in een bestandsshare met behulp van I/O-bibliotheken voor Java-bestanden

Het volgende codevoorbeeld laat zien hoe je tekst schrijft en toevoegt aan een bestand.

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

Voorbeeld: Een bestand in een bestandsshare vergrendelen met behulp van I/O-bibliotheken voor Java-bestanden

SMB-clients die bestandsshares koppelen, kunnen gebruikmaken van mechanismen voor het vergrendelen van het bestandssysteem om de toegang tot gedeelde bestanden te beheren.

In het volgende codevoorbeeld ziet u hoe u een bestand vergrendelt in een bestandsshare:

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

Wanneer u zowel SMB als de FileREST-API gebruikt, moet u er rekening mee houden dat de FileREST-API leases gebruikt om bestandsvergrendelingen te beheren, terwijl SMB gebruikmaakt van bestandssysteemvergrendelingen die worden beheerd door het besturingssysteem. Zie Bestandsvergrendelingen beheren voor meer informatie over het beheren van interacties tussen SMB en de FileREST-API.

Voorbeeld: ACL's voor bestanden inventariseren met behulp van I/O-bibliotheken voor Java-bestanden

In het volgende codevoorbeeld ziet u hoe u toegangsbeheerlijsten (ACL's) voor een bestand opsommen:

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

Werken met Azure Files met behulp van de File Shares-clientbibliotheek voor Java

De FileREST-API biedt programmatische toegang tot Azure Files. Hiermee kunt u HTTPS-eindpunten aanroepen om bewerkingen uit te voeren op bestandsshares, mappen en bestanden. De FileREST-API is ontworpen voor hoge schaalbaarheid en geavanceerde functies die mogelijk niet beschikbaar zijn via systeemeigen protocollen. De Azure SDK biedt clientbibliotheken, zoals de clientbibliotheek bestandsshares voor Java, die zijn gebaseerd op de FileREST-API.

Overweeg het gebruik van de FileREST-API en de bestandsshare-clientbibliotheek als uw toepassing vereist:

  • Geavanceerde functies: Toegang tot bewerkingen en functies die niet beschikbaar zijn via systeemeigen protocollen.
  • Aangepaste cloudintegraties: Bouw aangepaste services met toegevoegde waarde, zoals back-up, antivirus of gegevensbeheer, die rechtstreeks met Azure Files communiceren.
  • Optimalisatie van prestaties: Profiteer van prestatievoordelen in grootschalige scenario's met behulp van gegevensvlakbewerkingen.

De FileREST-API modelleert Azure Files als een hiërarchie van resources en wordt aanbevolen voor bewerkingen die worden uitgevoerd op map - of bestandsniveau . Geef de voorkeur aan de REST API van de opslagresourceprovider voor bewerkingen die worden uitgevoerd op het niveau van de bestandsservice of bestandsshare .

In deze sectie leert u hoe u de clientbibliotheek bestandsshares voor Java gebruikt om te werken met Azure Files-resources.

Zie de volgende bronnen voor meer informatie en voorbeelden:

Toegang autoriseren en een client maken

Als u een app wilt verbinden met Azure Files, maakt u een ShareClient object. Dit object is het uitgangspunt voor het werken met Azure Files-resources. In de volgende codevoorbeelden ziet u hoe u een ShareClient object maakt met behulp van verschillende autorisatiemechanismen.

Als u wilt autoriseren met Microsoft Entra-id, moet u een beveiligingsprincipaal gebruiken. Welk type beveiligingsprincipaal u nodig hebt, is afhankelijk van waar uw app wordt uitgevoerd. Zie Azure-verificatie met Java en Azure Identity voor meer informatie over verificatiescenario's.

Om te werken met de codevoorbeelden in dit artikel, wijst u de ingebouwde rol Opslagbestandsgegevens bevoorrechte bijdrager toe aan de beveiligingsprincipaal. Deze rol biedt volledige lees-, schrijf-, wijzigings-ACL's en verwijdertoegang voor alle gegevens in de shares voor alle geconfigureerde opslagaccounts, ongeacht de NTFS-machtigingen op bestand/directoryniveau die zijn ingesteld. Zie Toegang tot Azure-bestandsshares met behulp van Microsoft Entra ID met Azure Files OAuth via REST voor meer informatie.

Toegang autoriseren met DefaultAzureCredential

Een eenvoudige en veilige manier om toegang te autoriseren en verbinding te maken met Azure Files is door een OAuth-token te verkrijgen door een DefaultAzureCredential-instantie te creëren. Vervolgens kunt u die referentie gebruiken om een ShareClient object te maken.

In het volgende voorbeeld wordt een ShareClient object gemaakt dat is geautoriseerd met behulp van DefaultAzureCredential, en maakt u vervolgens een ShareDirectoryClient object om te werken met een map in de share:

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");

Als u precies weet welk referentietype u gebruikt om gebruikers te verifiëren, kunt u een OAuth-token verkrijgen met behulp van andere klassen in de Azure Identity-clientbibliotheek voor Java. Deze klassen zijn afgeleid van de klasse TokenCredential .

Zie Kiezen hoe u toegang tot bestandsgegevens kunt autoriseren voor meer informatie over elk van deze autorisatiemechanismen.

Voorbeeld: Bestanden kopiëren met behulp van de clientbibliotheek voor bestandsdeling

U kunt bestanden in een bestandsshare of tussen bestandsshares kopiëren met behulp van de volgende methode:

U kunt een bestand naar een doel-blob kopiëren met behulp van de volgende methode uit een BlockBlobClient object:

In het volgende codevoorbeeld ziet u hoe u een bestand kopieert naar een bestand in een andere bestandsshare:

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

Voorbeeld: Een bestand leasen met behulp van de bibliotheek van de client voor bestandsdeling.

Een lease maakt een vergrendeling op een bestand dat wordt beheerd door Azure via een lease-id. De lease biedt een mechanisme voor het coördineren van de toegang tot bestanden op meerdere clients in een gedistribueerd systeem. Een lease op een bestand biedt exclusieve schrijf- en verwijdertoegang. Zie Leasebestand voor meer informatie over leasestatussen en acties.

In het volgende codevoorbeeld ziet u hoe u een leaseclient maakt, een oneindige duur lease op een bestand verkrijgt en de lease vrijgeeft:

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

Wanneer u zowel SMB als de FileREST-API gebruikt, moet u er rekening mee houden dat de FileREST-API leases gebruikt om bestandsvergrendelingen te beheren, terwijl SMB gebruikmaakt van bestandssysteemvergrendelingen die worden beheerd door het besturingssysteem. Zie Bestandsvergrendelingen beheren voor meer informatie over het beheren van interacties tussen SMB en de FileREST-API.

Voorbeeld: Momentopnamen van bestandsdelers maken en weergeven met behulp van de clientbibliotheek.

Momentopnamen van bestandsshares zijn alleen-lezen kopieën van een bestandsshare op een gegeven moment. U kunt een momentopname van een bestandsshare maken en vervolgens de momentopname gebruiken om toegang te krijgen tot de gegevens in de share op het moment dat de momentopname is gemaakt. U kunt ook alle momentopnamen in een gedeelde map weergeven en momentopnamen van gedeelde mappen verwijderen.

In het volgende codevoorbeeld ziet u hoe u een momentopname van een share maakt, de momentopnamen in een bestandsshare weergeeft en de mapstructuur doorkruist in een momentopname van een share:

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

Opmerking

OAuth-tokens, zoals de tokens die zijn verkregen bij gebruik DefaultAzureCredential, zijn niet toegestaan voor bewerkingen in het gegevensvlak op het niveau van de bestandsshare. Als u wilt werken met momentopnamen van shares, moet het client-object worden geautoriseerd met behulp van een accountsleutel. Het ShareClient object dat in dit codevoorbeeld is gemaakt, maakt gebruik van een verbindingsreeks, die de accountsleutel bevat.

Het opslaan van accountsleutels of verbindingsreeksen vormt een beveiligingsrisico. U moet ze alleen gebruiken wanneer Microsoft Entra-verificatie niet beschikbaar is. Zie Over door Azure Key Vault beheerde opslagaccountsleutels voor meer informatie over het veilig opslaan van accountsleutels in Azure Key Vault.

Azure Files-resources beheren met behulp van de Azure Storage-beheerbibliotheken

De Azure Storage-beheerbibliotheken zijn gebaseerd op de REST API van de Azure Storage-resourceprovider. De Azure Storage-resourceprovider is een service op basis van Azure Resource Manager en ondersteunt zowel declaratieve (sjablonen) als imperatieve methoden (directe API-aanroep). De REST API van de Azure Storage-resourceprovider biedt programmatische toegang tot Azure Storage-resources, waaronder bestandsshares. De Azure SDK biedt beheerbibliotheken die zijn gebaseerd op de REST API van de Azure Storage-resourceprovider.

De beheerbibliotheken worden aanbevolen voor bewerkingen die worden uitgevoerd op bestandsservice - of bestandsshareniveau . In deze sectie leert u hoe u de Azure Storage-beheerbibliotheken gebruikt om Azure Files-resources te beheren.

De Azure Storage-beheerbibliotheken zijn gebaseerd op de REST API van de Azure Storage-resourceprovider. De Azure Storage-resourceprovider is een service op basis van Azure Resource Manager en ondersteunt zowel declaratieve (sjablonen) als imperatieve methoden (directe API-aanroep). De REST API van de Azure Storage-resourceprovider biedt programmatische toegang tot Azure Storage-resources, waaronder bestandsshares. De Azure SDK biedt beheerbibliotheken die zijn gebaseerd op de REST API van de Azure Storage-resourceprovider.

De beheerbibliotheken worden aanbevolen voor bewerkingen die worden uitgevoerd op bestandsservice - of bestandsshareniveau . In deze sectie leert u hoe u de Azure Storage-beheerbibliotheken gebruikt om Azure Files-resources te beheren.

Voorbeeld: Een bestandsshare maken met behulp van de Azure Storage-beheerbibliotheek

In het volgende codevoorbeeld ziet u hoe u een object op het hoogste niveau AzureResourceManager maakt, de opslagresourceprovider registreert bij een abonnement en een bestandsshare maakt met behulp van de Azure Storage-beheerbibliotheek:

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

U kunt de eigenschappen van de bestandsshare configureren met behulp van de klasse FileShareInner . In het vorige voorbeeld ziet u hoe u het sharequotum instelt bij het maken van de bestandsshare. Als u een bestaande bestandsshare wilt bijwerken, belt u fileShare.update() en geeft u het object FileShareInner door met de gewenste eigenschappen die u wilt bijwerken.

Opmerking

Als u de registratiebewerking wilt uitvoeren, hebt u machtigingen nodig voor de volgende Azure RBAC-actie: Microsoft.Storage/register/action. Deze machtiging is opgenomen in de ingebouwde rollen Inzender en Eigenaar.

Voorbeeld: Bestandsshares en momentopnamen weergeven met behulp van de Azure Storage-beheerbibliotheek

In het volgende codevoorbeeld ziet u hoe u bestandsshares en momentopnamen in een opslagaccount weergeeft:

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

Volgende stappen

Zie de volgende resources voor meer informatie over ontwikkelen met Azure Files: