استخدام Java لإدارة الدلائل والملفات في Azure Data Lake Storage Gen2

توضح لك هذه المقالة كيفية استخدام Java لإنشاء الدلائل والملفات وإدارتها في حسابات التخزين التي تحتوي على مساحة أسماء هرمية.

للتعرف على كيفية الحصول على قوائم التحكم في الوصول الخاصة بالدلائل والملفات وتعيينها وتحديثها، راجع ⁧⁩استخدام . Java لإدارة قوائم التحكم في الوصول في Azure Data Lake Storage Gen2⁧⁩.

⁩حزمة (Maven)⁧⁩⁧ | ⁩⁧⁩العينات⁧⁩⁧ | ⁩⁧⁩ مرجع واجهة برمجة التطبيقات⁧⁩⁧ | ⁩⁧⁩ تعيين Gen1 إلى Gen2⁧⁩⁧ | ⁩⁧⁩تقديم الملاحظات⁧

المتطلبات الأساسية

إعداد مشروعك

للبدء، افتح ⁧⁩هذه الصفحة⁧⁩ وابحث عن أحدث إصدار من مكتبة Java. افتح الملف ⁧⁩pom.xml⁧⁩ في محرر النصوص الخاص بك. إضافة عنصر تبعية يشير إلى هذا الإصدار.

إذا كنت تخطط لمصادقة تطبيق العميل باستخدام Azure Active Directory (Azure AD)، فقم بإضافة تبعية إلى مكتبة عميل Azure Secret. لمزيد من المعلومات، راجع ⁧⁩إضافة حزمة مكتبة العميل السرية إلى مشروعك⁧⁩.

بعد ذلك، أضف عبارات الاستيراد هذه إلى ملف التعليمات البرمجية.

import com.azure.storage.common.StorageSharedKeyCredential;
import com.azure.storage.file.datalake.DataLakeDirectoryClient;
import com.azure.storage.file.datalake.DataLakeFileClient;
import com.azure.storage.file.datalake.DataLakeFileSystemClient;
import com.azure.storage.file.datalake.DataLakeServiceClient;
import com.azure.storage.file.datalake.DataLakeServiceClientBuilder;
import com.azure.storage.file.datalake.models.ListPathsOptions;
import com.azure.storage.file.datalake.models.PathItem;
import com.azure.storage.file.datalake.models.AccessControlChangeCounters;
import com.azure.storage.file.datalake.models.AccessControlChangeResult;
import com.azure.storage.file.datalake.models.AccessControlType;
import com.azure.storage.file.datalake.models.PathAccessControl;
import com.azure.storage.file.datalake.models.PathAccessControlEntry;
import com.azure.storage.file.datalake.models.PathPermissions;
import com.azure.storage.file.datalake.models.PathRemoveAccessControlEntry;
import com.azure.storage.file.datalake.models.RolePermissions;
import com.azure.storage.file.datalake.options.PathSetAccessControlRecursiveOptions;

الاتصال بالحساب

لاستخدام القصاصات البرمجية في هذه المقالة، ستحتاج إلى إنشاء مثيل ⁧⁩DataLakeServiceClient⁧⁩ يمثل حساب التخزين.

الاتصال باستخدام مفتاح حساب

هذه هي أسهل طريقة للاتصال بحساب.

يقوم هذا المثال بإنشاء مثيل ⁧⁩DataLakeServiceClient⁧⁩ باستخدام مفتاح حساب.

static public DataLakeServiceClient GetDataLakeServiceClient
(String accountName, String accountKey){

    StorageSharedKeyCredential sharedKeyCredential =
        new StorageSharedKeyCredential(accountName, accountKey);

    DataLakeServiceClientBuilder builder = new DataLakeServiceClientBuilder();

    builder.credential(sharedKeyCredential);
    builder.endpoint("https://" + accountName + ".dfs.core.windows.net");

    return builder.buildClient();
}

الاتصال باستخدام Azure Active Directory (Azure AD)

يمكنك استخدام ⁧⁩مكتبة عميل هوية Azure لـ Java⁧⁩ لمصادقة تطبيقك باستخدام Azure AD.

ينشئ هذا المثال مثيل ⁧⁩DataLakeServiceClient⁧⁩ باستخدام معرف عميل وسر عميل ومعرف مستأجر. للحصول على هذه القيم، راجع ⁧⁩الحصول على رمز مميز من Azure AD لتخويل الطلبات من تطبيق عميل⁧⁩.

static public DataLakeServiceClient GetDataLakeServiceClient
    (String accountName, String clientId, String ClientSecret, String tenantID){

    String endpoint = "https://" + accountName + ".dfs.core.windows.net";
    
    ClientSecretCredential clientSecretCredential = new ClientSecretCredentialBuilder()
    .clientId(clientId)
    .clientSecret(ClientSecret)
    .tenantId(tenantID)
    .build();
       
    DataLakeServiceClientBuilder builder = new DataLakeServiceClientBuilder();
    return builder.credential(clientSecretCredential).endpoint(endpoint).buildClient();
}

ملاحظة

لمزيد من الأمثلة، راجع ⁧⁩مكتبة عميل هوية Azure للحصول على وثائق Java⁧⁩.

إنشاء حاوية

تعمل الحاوية كنظام ملفات لملفاتك. يمكنك إنشاء واحد عن طريق استدعاء الأسلوب ⁧⁩DataLakeServiceClient.createFileSystem⁧⁩.

ينشئ هذا المثال حاوية باسم ⁧my-file-system⁩.

public DataLakeFileSystemClient CreateFileSystem
(DataLakeServiceClient serviceClient){

    return serviceClient.createFileSystem("my-file-system");
}

إنشاء دليل

إنشاء مرجع دليل عن طريق استدعاء الأسلوب ⁧⁩DataLakeFileSystemClient.createDirectory⁧⁩.

يضيف هذا المثال دليلاً مسمى ⁧my-directory⁩ إلى حاوية، ثم يضيف دليلاً فرعيًا باسم ⁧my-subdirectory⁩.

public DataLakeDirectoryClient CreateDirectory
(DataLakeServiceClient serviceClient, String fileSystemName){

    DataLakeFileSystemClient fileSystemClient =
    serviceClient.getFileSystemClient(fileSystemName);

    DataLakeDirectoryClient directoryClient =
        fileSystemClient.createDirectory("my-directory");

    return directoryClient.createSubdirectory("my-subdirectory");
}

إعادة تسمية دليل أو نقله

إعادة تسمية أو نقل دليل عن طريق استدعاء الأسلوب ⁧⁩DataLakeDirectoryClient.rename⁧⁩. تمرير مسار الدليل المطلوب معلمة.

يعيد هذا المثال تسمية دليل فرعي إلى الاسم ⁧my-subdirectory-renamed⁩.

public DataLakeDirectoryClient
    RenameDirectory(DataLakeFileSystemClient fileSystemClient){

    DataLakeDirectoryClient directoryClient =
        fileSystemClient.getDirectoryClient("my-directory/my-subdirectory");

    return directoryClient.rename(fileSystemClient.getFileSystemName(),"my-subdirectory-renamed");
}

ينقل هذا المثال دليلاً مسمى ⁧my-subdirectory-renamed⁩ إلى دليل فرعي لدليل مسمى ⁧my-directory-2⁩.

public DataLakeDirectoryClient MoveDirectory
(DataLakeFileSystemClient fileSystemClient){

    DataLakeDirectoryClient directoryClient =
        fileSystemClient.getDirectoryClient("my-directory/my-subdirectory-renamed");

    return directoryClient.rename(fileSystemClient.getFileSystemName(),"my-directory-2/my-subdirectory-renamed");                
}

حذف دليل

حذف دليل عن طريق استدعاء الأسلوب ⁧⁩DataLakeDirectoryClient.deleteWithResponse⁧⁩.

يحذف هذا المثال دليلاً باسم ⁧my-directory⁩.

public void DeleteDirectory(DataLakeFileSystemClient fileSystemClient){
    
    DataLakeDirectoryClient directoryClient =
        fileSystemClient.getDirectoryClient("my-directory");

    directoryClient.deleteWithResponse(true, null, null, null);
}

تحميل ملف إلى دليل

أولاً، قم بإنشاء مرجع ملف في الدليل الهدف عن طريق إنشاء مثيل من فئة ⁧⁩DataLakeFileClient⁧⁩. Upload ملف عن طريق استدعاء الأسلوب ⁧⁩DataLakeFileClient.append⁧⁩. تأكد من إكمال التحميل عن طريق الاتصال بطريقة ⁧⁩DataLakeFileClient.FlushAsync⁧⁩.

يقوم هذا المثال بتحميل ملف نصي إلى دليل باسم ⁧my-directory⁩.

public void UploadFile(DataLakeFileSystemClient fileSystemClient) 
    throws FileNotFoundException{
    
    DataLakeDirectoryClient directoryClient =
        fileSystemClient.getDirectoryClient("my-directory");

    DataLakeFileClient fileClient = directoryClient.createFile("uploaded-file.txt");

    File file = new File("C:\\Users\\constoso\\mytestfile.txt");

 //   InputStream targetStream = new FileInputStream(file);
    InputStream targetStream = new BufferedInputStream(new FileInputStream(file));

    long fileSize = file.length();

    fileClient.append(targetStream, 0, fileSize);

    fileClient.flush(fileSize);
}

تلميح

إذا كان حجم الملف الخاص بك كبيرًا، فسيتعين على التعليمات البرمجية إجراء مكالمات متعددة إلى طريقة ⁧⁩DataLakeFileClient.append⁧⁩. فكر في استخدام الأسلوب ⁧⁩DataLakeFileClient.uploadFromFile⁧⁩ بدلاً من ذلك. وبهذه الطريقة، يمكنك تحميل الملف بأكمله في استدعاء واحد.

راجع المقطع التالي للحصول على مثال.

تحميل ملف كبير إلى دليل

استخدم الأسلوب ⁧⁩DataLakeFileClient.uploadFromFile⁧⁩ لتحميل ملفات كبيرة دون الحاجة إلى إجراء مكالمات متعددة إلى الأسلوب ⁧⁩DataLakeFileClient.append⁧⁩.

public void UploadFileBulk(DataLakeFileSystemClient fileSystemClient) 
    throws FileNotFoundException{
    
    DataLakeDirectoryClient directoryClient =
        fileSystemClient.getDirectoryClient("my-directory");

    DataLakeFileClient fileClient = directoryClient.getFileClient("uploaded-file.txt");

    fileClient.uploadFromFile("C:\\Users\\contoso\\mytestfile.txt");

}

تنزيل من دليل

أولاً، قم بإنشاء مثيل ⁧⁩DataLakeFileClient⁧⁩ الذي يمثل الملف الذي تريد تنزيله. استخدم الأسلوب ⁧⁩DataLakeFileClient.read⁧⁩ لقراءة الملف. استخدم أي واجهة برمجة تطبيقات لمعالجة ملفات Java لحفظ وحدات البايت من الدفق إلى ملف.

public void DownloadFile(DataLakeFileSystemClient fileSystemClient)
  throws FileNotFoundException, java.io.IOException{

    DataLakeDirectoryClient directoryClient =
        fileSystemClient.getDirectoryClient("my-directory");

    DataLakeFileClient fileClient = 
        directoryClient.getFileClient("uploaded-file.txt");

    File file = new File("C:\\Users\\contoso\\downloadedFile.txt");

    OutputStream targetStream = new FileOutputStream(file);
    
    fileClient.read(targetStream);

    targetStream.close();

    fileClient.flush(file.length());
    
}

قائمة محتويات الدليل

يقوم هذا المثال بطباعة أسماء كل ملف موجود في دليل باسم ⁧my-directory⁩.

public void ListFilesInDirectory(DataLakeFileSystemClient fileSystemClient){
    
    ListPathsOptions options = new ListPathsOptions();
    options.setPath("my-directory");
 
    PagedIterable<PathItem> pagedIterable = 
    fileSystemClient.listPaths(options, null);

    java.util.Iterator<PathItem> iterator = pagedIterable.iterator();

   
    PathItem item = iterator.next();

    while (item != null)
    {
        System.out.println(item.getName());


        if (!iterator.hasNext())
        {
            break;
        }
        
        item = iterator.next();
    }

}

راجع أيضًا