Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
✔️ Şunlar için geçerlidir: Microsoft.Storage kaynak sağlayıcısıyla oluşturulan klasik SMB ve NFS dosya paylaşımları
✖️ Şunlar için geçerli değildir: Microsoft.FileShares kaynak sağlayıcısıyla oluşturulan dosya paylaşımları
Verileri depolamak için Azure Dosyalar kullanan Java uygulamaları geliştirmeyi öğrenin. Azure Dosyalar, bulutta yönetilen bir dosya paylaşımı hizmetidir. Endüstri standardı Sunucu İleti Bloğu (SMB) ve Ağ Dosya Sistemi (NFS) protokolleri aracılığıyla erişilebilen tam olarak yönetilen dosya paylaşımları sağlar. Azure Dosyalar ayrıca dosya paylaşımlarına programlı erişim için bir REST API sağlar.
Bu makalede, Java'da Azure Dosyalar ile geliştirmenin farklı yaklaşımları ve uygulamanızın gereksinimlerine en uygun yaklaşımı seçmeyi öğreneceksiniz. Ayrıca Azure Dosyalar kaynaklarla etkileşim kuran temel bir konsol uygulaması oluşturmayı da öğrenirsiniz.
Azure Dosyalar ile Java uygulama geliştirme hakkında
Azure Dosyalar, Java geliştiricilerin Azure Dosyalar'daki verilere erişmesi ve kaynakları yönetmesi için çeşitli yollar sunar. Aşağıdaki tabloda yaklaşımlar listelenir, nasıl çalıştıkları özetler ve her yaklaşımın ne zaman kullanılacağına ilişkin yönergeler sağlanır:
| Yaklaşım | Nasıl çalışır? | Ne zaman kullanılır? |
|---|---|---|
| Standart dosya giriş/çıkış kitaplıkları | SMB veya NFS kullanılarak bağlanan Azure dosya paylaşımları aracılığıyla işletim sistemi düzeyinde API çağrılarını kullanır. SMB/NFS kullanarak dosya paylaşımını bağladığınızda, java.io ve Java için java.nio gibi bir programlama dili veya çerçevesi için dosya giriş/çıkış kitaplıklarını kullanabilirsiniz. |
Standart dosya G/Ç kullanan mevcut koda sahip iş kolu uygulamalarınız var ve uygulamanın bir Azure dosya paylaşımıyla çalışması için kodu yeniden yazmak istemiyorsunuz. |
| FileREST API | Azure Dosyalar depolanan verilerle etkileşime geçmek için HTTPS uç noktalarını doğrudan çağırır. Dosya paylaşımı kaynakları üzerinde programlı denetim sağlar. Azure SDK, FileREST API üzerine inşa edilen File Shares istemci kütüphanesini (com.azure.storage.file.share) sağlar, böylece tanıdık Java programlama dili paradigmaları üzerinden FileREST API işlemleriyle etkileşime girebilirsiniz. |
Müşteriler için katma değer bulut hizmetleri ve uygulamaları oluşturuyorsunuz ve standart dosya I/O kütüphanelerinin sunmadığı gelişmiş özellikleri kullanmak istiyorsunuz. |
| Depolama kaynak sağlayıcısı REST API'si | Depolama hesaplarını ve dosya paylaşımlarını yönetmek için Azure Resource Manager (ARM) kullanır. Çeşitli kaynak yönetimi işlemleri için REST API uç noktalarını çağırır. | Uygulamanızın veya hizmetinizin depolama hesaplarını veya dosya paylaşımlarını oluşturma, silme veya güncelleştirme gibi kaynak yönetimi görevlerini gerçekleştirmesi gerekir. |
Bu yaklaşımlar hakkında genel bilgi için bkz. Genel bakış Azure Dosyalar ile uygulama geliştirme.
Bu makalede, aşağıdaki yaklaşımları kullanarak Azure Dosyalar kaynaklarla çalışmaya odaklanmaktadır:
- Java dosya G/Ç kitaplıklarını kullanarak Azure Dosyalar ile çalışın: SMB veya NFS kullanarak dosya paylaşımı bağlayın ve paylaşımdaki dosya ve dizinlerle çalışmak için Java dosya G/Ç kitaplıklarını kullanın.
- Azure Dosyalar ile Java için Dosya Paylaşımları istemci kitaplığını kullanarak çalışın: Dosya paylaşımlarında bulunan dosya ve dizinlerle çalışmak için Java için Azure Depolama Dosya Paylaşımları istemci kitaplığını kullanın. Bu istemci kitaplığı FileREST API'si üzerine kuruludur.
- Azure Depolama yönetim kitaplıklarını kullanarak Azure Dosyalar kaynaklarını yönetin: Depolama hesabınızdaki dosya paylaşımlarını ve diğer kaynakları yönetmek için Azure Depolama yönetim kitaplıklarını kullanın. Yönetim kitaplıkları Azure Depolama kaynak sağlayıcısı REST API'sini oluşturur.
Önkoşullar
- Azure aboneliği - ücretsiz bir abonelik oluştur
- depolama hesabı Azure - depolama hesabı oluşturun
- Java Geliştirme Seti (JDK) sürüm 8 veya üzeri
- Apache Maven bu örnekte proje yönetimi için kullanılır
Ortamınızı ayarlama
Uyarı
Bu makalede, örnek kodu derlemek ve çalıştırmak için Maven derleme aracı kullanılır. Gradle gibi diğer derleme araçları da Java için Azure SDK ile çalışır.
Maven'ı kullanarak yeni bir konsol uygulaması oluşturun veya var olan bir projeyi açın. Paketleri yüklemek ve gerekli import yönergeleri eklemek için bu adımları izleyin.
Paketleri yükleme
pom.xml Dosyayı metin düzenleyicinizde açın. Paketleri BOM dosyasını ekleyerek veya doğrudan bağımlılık ekleyerek yükleyin.
BOM dosyasını dahil et
Kitaplığın en son sürümüne bağımlılık oluşturmak için azure-sdk-bom ekleyin. Aşağıdaki kod parçacığında yer tutucuyu {bom_version_to_target} sürüm numarasıyla değiştirin.
azure-sdk-bom kullanmak, her bir bağımlılığın sürümünü belirtmenize gerek kalmamanızı sağlar. Ürün Malzeme Listesi (BOM) hakkında daha fazla bilgi için Azure SDK BOM README'ye bakın.
<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>
Bağımlılık grubuna aşağıdaki bağımlılık öğelerini ekleyin. Azure hizmetlerine parolasız bağlantılar için azure-identity bağımlılığı gereklidir. Kaynak yöneticisi eserleri BOM dosyasında yer almıyor, bu yüzden doğrudan bağımlılık olarak ekleyin.
<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>
Doğrudan bağımlılık ekleme
Kitaplığın belirli bir sürümüne bağımlılık almak için doğrudan bağımlılığı projenize ekleyin:
<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>
İçeri aktarma yönergelerini dahil et
Ardından kod dosyanızı açın ve gerekli import yönergeleri ekleyin. Bu örnek, App.java dosyasına aşağıdaki direktifleri ekler:
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.*;
Java dosya G/Ç kitaplıklarını kullanmayı planlıyorsanız, aşağıdaki içeri aktarma yönergelerini de eklemeniz gerekir:
import java.io.*;
import java.nio.file.*;
Java dosya G/Ç kitaplıklarını kullanarak Azure Dosyalar ile çalışma
Standart dosya G/Ç kitaplıkları, Azure Dosyalar kaynaklara erişmenin ve bunlarla çalışmanın en yaygın yoludur. SMB veya NFS kullanarak bir dosya paylaşımı bağladığınızda, işletim sisteminiz yerel dosya sistemi için API isteklerini yeniden yönlendirir. Bu yaklaşım, paylaşımdaki dosya ve dizinlerle etkileşime geçmek için java.io ve java.nio gibi standart dosya G/Ç kitaplıklarını kullanmanıza olanak tanır.
Uygulamanız şunları gerektirdiğinde Java dosya G/Ç kitaplıklarını kullanmayı göz önünde bulundurun:
- App uyumluluğu: Zaten Java dosya G/Ç kitaplıklarını kullanan mevcut koda sahip kurumsal uygulamalar için idealdir. Uygulamanın bir Azure dosya paylaşımıyla çalışması için kodu yeniden yazmanız gerekmez.
- Kullanım kolaylığı: Java dosya girdi/çıktı (I/O) kitaplıkları geliştiriciler tarafından iyi bilinir ve kullanımı kolaydır. Azure Dosyalar temel değer teklifi, yerel dosya sistemi API'lerini SMB ve NFS aracılığıyla kullanıma sunmasıdır.
Bu bölümde, Azure Dosyalar kaynaklarla çalışmak için Java dosya G/Ç kitaplıklarını kullanmayı öğreneceksiniz.
Daha fazla bilgi ve örnek için aşağıdaki kaynağa bakın:
Dosya paylaşımını bağlamak
Java dosya G/Ç kitaplıklarını kullanmak için önce bir dosya paylaşımı bağlamanız gerekir. SMB veya NFS kullanarak dosya paylaşımını bağlama yönergeleri için aşağıdaki kaynaklara bakın:
- Windows'ta SMB dosya paylaşımını bağla
- Linux'ta SMB dosya paylaşımını bağlama
- Linux'ta NFS dosya paylaşımını bağlama
Bu makale, Windows'ta monte edilmiş SMB dosya paylaşımına atıfta bulunmak için aşağıdaki yolu kullanır:
String fileSharePath = "Z:\\file-share";
Örnek: Dosya paylaşımına bağlanma ve Java dosya G/Ç kitaplıklarını kullanarak dizinleri listeleme
Aşağıdaki kod örneği, bir dosya paylaşımına bağlanmayı ve paylaşımdaki dizinleri listelemeyi gösterir:
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());
}
Örnek: Java dosya G/Ç kitaplıklarını kullanarak dosya paylaşımındaki bir dosyaya yazma
Aşağıdaki kod örneğinde bir dosyaya metin yazma ve ekleme işlemi gösterilmektedir:
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());
}
Örnek: Java dosya G/Ç kitaplıklarını kullanarak dosya paylaşımındaki bir dosyayı kilitleme
Dosya paylaşımlarını bağlayan SMB istemcileri, paylaşılan dosyalara erişimi yönetmek için dosya sistemi kilitleme mekanizmalarını kullanabilir.
Aşağıdaki kod örneği, dosya paylaşımındaki bir dosyanın nasıl kilit yapılacağını gösterir:
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();
}
Hem SMB hem de FileREST API'sini kullandığınızda, FileREST API'nin dosya kilitlerini yönetmek için kiralamalar kullandığını, SMB'nin ise işletim sistemi tarafından yönetilen dosya sistemi kilitlerini kullandığını unutmayın. SMB ile FileREST API arasındaki dosya kilitleme etkileşimlerini yönetme hakkında daha fazla bilgi edinmek için bkz. Dosya kilitlerini yönetme.
Örnek: Java dosya G/Ç kitaplıklarını kullanarak dosya ACL'lerini listeleme
Aşağıdaki kod örneğinde, bir dosya için erişim denetim listelerinin (ACL) nasıl numaralandırılası gösterilmektedir:
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());
}
Java için Dosya Paylaşımları istemci kitaplığını kullanarak Azure Dosyalar ile çalışma
FileREST API, Azure Dosyalar'a programatik olarak erişim sağlar. Dosya paylaşımları, dizinler ve dosyalar üzerinde işlem gerçekleştirmek için HTTPS uç noktalarını çağırmanıza olanak tanır. FileREST API'si, yerel protokoller aracılığıyla kullanılamayabilecek yüksek ölçeklenebilirlik ve gelişmiş özellikler için tasarlanmıştır. Azure SDK, FileREST API'sini oluşturan Java için Dosya Paylaşımları istemci kitaplığı gibi istemci kitaplıkları sağlar.
Uygulamanız şu gereksinimleri gerektiriyorsa, FileREST API'si ve Dosya Paylaşımları istemci kütüphanesini kullanmayı düşünün:
- Gelişmiş özellikler: Yerel protokoller aracılığıyla kullanılamayabilecek işlemlere ve özelliklere erişin.
- Özel bulut tümleştirmeleri: Azure Dosyalar ile doğrudan etkileşim kuran yedekleme, virüsten koruma veya veri yönetimi gibi özel katma değerli hizmetler oluşturun.
- Performans iyileştirmesi: Veri düzlemi işlemlerini kullanarak yüksek ölçekli senaryolarda performans avantajlarından yararlanın.
FileREST API, Azure Dosyalar'ı kaynaklar hiyerarşisi olarak modeller. Dizin veya dosya seviyesinde yaptığınız işlemler için kullanın. Dosya servisi veya dosya paylaşımı seviyesinde yaptığınız işlemler için Depolama kaynak sağlayıcısı REST API'sini kullanın.
Bu bölümde, Java Azure Dosyalar kaynaklarla çalışması için Dosya Paylaşımları istemci kitaplığını kullanmayı öğreneceksiniz.
Daha fazla bilgi ve örnek için aşağıdaki kaynaklara bakın:
Erişimi yetkilendirme ve istemci oluşturma
Bir uygulamayı Azure Dosyalar bağlamak için bir ShareClient nesnesi oluşturun. Bu nesne, Azure Dosyalar kaynaklarla çalışmak için başlangıç noktanızdır. Aşağıdaki kod örnekleri, farklı yetkilendirme mekanizmaları kullanarak bir ShareClient nesnenin nasıl oluşturulacağını gösterir.
Microsoft Entra ID ile yetkilendirmek için bir güvenlik sorumlusu kullanın. İhtiyacınız olan güvenlik sorumlusunun türü, uygulamanızın nerede çalıştığına bağlıdır. Kimlik doğrulama senaryoları hakkında daha fazla bilgi edinmek için bkz. Java ve Azure Identity ile
Bu makaledeki kod örnekleriyle çalışmak için Azure RBAC yerleşik rolünü Depolama Dosya Verileri Ayrıcalıklı Katkıda Bulunan güvenlik sorumlusuna atayın. Bu rol, ayarlanan dosya/dizin düzeyi NTFS izinlerinden bağımsız olarak tüm yapılandırılmış depolama hesapları için paylaşımlardaki tüm verilere tam okuma, yazma, değiştirme ve silme erişimi sağlar. Daha fazla bilgi için bkz. Azure dosya paylaşımlarına Microsoft Entra ID kullanarak Azure Dosyalar OAuth üzerinden REST ile erişim.
DefaultAzureCredential kullanarak erişimi yetkilendirme
Erişimi yetkilendirmenin ve Azure Dosyalar bağlanmanın kolay ve güvenli bir yolu, DefaultAzureCredential örneği oluşturarak OAuth belirteci almaktır. Ardından bu kimlik bilgilerini kullanarak bir ShareClient nesne oluşturabilirsiniz.
Aşağıdaki örnek, kullanılarak ShareClientyetkilendirilmiş bir DefaultAzureCredential nesne oluşturur ve ardından paylaşımdaki bir ShareDirectoryClient dizinle çalışmak için bir nesne oluşturur:
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");
Kullanıcıların kimliğini doğrulamak için tam olarak hangi kimlik bilgisi türünü kullandığınızı biliyorsanız, Java için
Bu yetkilendirme mekanizmalarının her biri hakkında daha fazla bilgi edinmek için bkz. Dosya verilerine erişimi yetkilendirmeyi seçme.
Örnek: Dosya Paylaşımları istemci kitaplığını kullanarak dosyaları kopyalama
Aşağıdaki yöntemi kullanarak dosyaları bir dosya paylaşımı içinde veya dosya paylaşımları arasında kopyalayabilirsiniz:
Bir nesneden BlockBlobClient aşağıdaki yöntemi kullanarak bir dosyayı hedef bloba kopyalayabilirsiniz:
Aşağıdaki kod örneği, bir dosyanın başka bir dosya paylaşımındaki bir dosyaya nasıl kopyalanmasını gösterir:
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());
Örnek: Dosya Paylaşımları istemci kitaplığını kullanarak dosya kiralama
Kiralama, kira kimliği aracılığıyla Azure tarafından yönetilen bir dosyada kilit oluşturur. Kira, dağıtılmış bir sistemdeki birden çok istemcideki dosyalara erişimi koordine etmek için bir mekanizma sağlar. Bir dosyadaki kiralama özel yazma ve silme erişimi sağlar. Kira durumları ve eylemleri hakkında daha fazla bilgi edinmek için bkz. Kira Dosyası.
Aşağıdaki kod örneğinde kira istemcisi oluşturma, dosyada sonsuz süreli kiralama alma ve kirayı serbest bırakma işlemi gösterilmektedir:
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());
}
}
Hem SMB hem de FileREST API'sini kullandığınızda, FileREST API'nin dosya kilitlerini yönetmek için kiralamalar kullandığını, SMB'nin ise işletim sistemi tarafından yönetilen dosya sistemi kilitlerini kullandığını unutmayın. SMB ile FileREST API arasındaki dosya kilitleme etkileşimlerini yönetme hakkında daha fazla bilgi edinmek için bkz. Dosya kilitlerini yönetme.
Örnek: Dosya Paylaşımları istemci kitaplığını kullanarak paylaşım anlık görüntülerini oluşturma ve listeleme
Paylaşım anı görüntüleri, bir dosya paylaşımının belirli bir noktadaki salt okunur kopyalarıdır. Bir dosya paylaşımının anlık görüntüsünü oluşturabilir ve ardından anlık görüntünün oluşturulduğu sırada paylaşımdaki verilere erişmek için anlık görüntüyü kullanabilirsiniz. Ayrıca bir dosya paylaşımındaki tüm anlık görüntüleri listeleyebilir ve paylaşım anlık görüntülerini silebilirsiniz.
Aşağıdaki kod örneğinde paylaşım anlık görüntüsü oluşturma, dosya paylaşımındaki anlık görüntüleri listeleme ve paylaşım anlık görüntüsünde dizin ağacında dolaşma işlemleri gösterilmektedir:
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());
}
}
}
Uyarı
OAuth belirteçleri, örneğin DefaultAzureCredential kullanılırken elde edilenler gibi, dosya paylaşımı düzeyinde veri düzlemi işlemleri için izin verilmez. Paylaşım anlık görüntüleriyle çalışmak için istemci nesnesinin hesap anahtarı kullanılarak yetkilendirilmiş olması gerekir. Bu kod örneğinde oluşturulan ShareClient nesnesi, hesap anahtarını içeren bir bağlantı dizesi kullanır.
Hesap anahtarlarının veya bağlantı dizelerinin depolanması bir güvenlik riski oluşturur. Sadece Microsoft Entra doğrulaması mevcut olmadığında kullanın. Depolamaya erişimi güvenli bir şekilde yetkilendirme hakkında daha fazla bilgi edinmek için bkz. Azure Depolama içindeki verilere erişimi yetkilendirme.
Azure Depolama yönetim kitaplıklarını kullanarak Azure Dosyalar kaynaklarını yönetme
Azure Depolama yönetim kitaplıkları, Azure Depolama kaynak sağlayıcısı REST API'sinde oluşturulur. Azure Depolama kaynak sağlayıcısı Azure Resource Manager tabanlı bir hizmettir ve hem bildirim temelli (şablonlar) hem de kesinlik temelli (doğrudan API çağrısı) yöntemlerini destekler. Azure Depolama kaynak sağlayıcısı REST API'si, dosya paylaşımları dahil olmak üzere Azure Depolama kaynaklarına programlı erişim sağlar. Azure SDK, Azure Depolama kaynak sağlayıcısı REST API'sini oluşturan yönetim kitaplıkları sağlar.
Yönetim kitaplıkları , dosya hizmeti veya dosya paylaşımı düzeyinde gerçekleştirilen işlemler için önerilir. Bu bölümde, Azure Dosyalar kaynaklarını yönetmek için Azure Depolama yönetim kitaplıklarını kullanmayı öğreneceksiniz.
Örnek: Azure Depolama yönetim kitaplığını kullanarak dosya paylaşımı oluşturma
Aşağıdaki kod örneğinde en üst düzey AzureResourceManager nesnesi oluşturma, Depolama kaynak sağlayıcısını bir aboneliğe kaydetme ve Azure Depolama yönetim kitaplığını kullanarak dosya paylaşımı oluşturma işlemleri gösterilmektedir:
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)
);
FileShareInner sınıfını kullanarak dosya paylaşımı özelliklerini yapılandırabilirsiniz. Önceki örnekte, dosya paylaşımı oluşturulurken paylaşım kotasının nasıl ayarlanacağı gösterilmektedir. Var olan bir dosya paylaşımını güncellemek için fileShare.update() çağırın ve güncellemek istediğiniz özelliklerle birlikte FileShareInner nesnesini geçirin.
Uyarı
Kayıt işlemini gerçekleştirmek için aşağıdaki Azure RBAC eylemi için izinlere sahip olmanız gerekir: Microsoft. Depolama/kaydetme/eylem. Bu izin Katılımcı ve Sahip yerleşik rollerinin parçasıdır.
Örnek: Azure Depolama yönetim kitaplığını kullanarak dosya paylaşımlarını ve anlık görüntüleri listeleme
Aşağıdaki kod örneği, bir depolama hesabında dosya paylaşımlarını ve anlık görüntüleri listelemeyi gösterir:
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());
}
Sonraki adımlar
Azure Dosyalar ile geliştirme hakkında daha fazla bilgi için aşağıdaki kaynaklara bakın: