Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
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) |
![]() |
![]() |
Microsoft.Storage | Geconfigureerd v2 | HDD (standaard) | Zone (ZRS) |
![]() |
![]() |
Microsoft.Storage | Geconfigureerd v2 | HDD (standaard) | Aardrijkskunde (GRS) |
![]() |
![]() |
Microsoft.Storage | Geconfigureerd v2 | HDD (standaard) | GeoZone (GZRS) |
![]() |
![]() |
Microsoft.Storage | Geconfigureerd v1 | SSD (van hoge kwaliteit) | Lokaal (LRS) |
![]() |
![]() |
Microsoft.Storage | Geconfigureerd v1 | SSD (van hoge kwaliteit) | Zone (ZRS) |
![]() |
![]() |
Microsoft.Storage | Betaal naar verbruik | HDD (standaard) | Lokaal (LRS) |
![]() |
![]() |
Microsoft.Storage | Betaal naar verbruik | HDD (standaard) | Zone (ZRS) |
![]() |
![]() |
Microsoft.Storage | Betaal naar verbruik | HDD (standaard) | Aardrijkskunde (GRS) |
![]() |
![]() |
Microsoft.Storage | Betaal naar verbruik | HDD (standaard) | GeoZone (GZRS) |
![]() |
![]() |
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:
- Werk met Azure Files met I/O-bibliotheken voor Java-bestanden: koppel een bestandsshare met behulp van SMB of NFS en gebruik I/O-bibliotheken voor Java-bestanden om te werken met bestanden en mappen in de share.
- Werk met Azure Files met behulp van de clientbibliotheek bestandsshares voor Java: gebruik de Clientbibliotheek voor Azure Storage-bestandsshares voor Java om te werken met bestanden en mappen in een bestandsshare. Deze clientbibliotheek bouwt voort op de FileREST-API.
- Azure Files-resources beheren met behulp van de Azure Storage-beheerbibliotheken: gebruik de Azure Storage-beheerbibliotheken om bestandsshares en andere resources in uw opslagaccount te beheren. De beheerbibliotheken zijn gebaseerd op de REST API van de Azure Storage-resourceprovider.
Vereiste voorwaarden
- Azure-abonnement: u kunt een gratis abonnement nemen
- Azure Storage-account: maak een opslagaccount
- Java Development Kit (JDK)-versie 8 of hoger
- Apache Maven wordt in dit voorbeeld gebruikt voor projectbeheer
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:
- Een SMB-bestandsdeling koppelen op Windows
- Een SMB-bestandsdeling koppelen in Linux
- Een NFS-bestandsdeling koppelen op Linux
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: