Bagikan melalui


Gunakan Java untuk mengelola direktori dan file di Azure Data Lake Storage Gen2

Artikel ini menunjukkan cara menggunakan Java untuk membuat dan mengelola direktori dan file di akun penyimpanan yang memiliki namespace hierarkis.

Untuk mempelajari cara mendapatkan, mengatur, dan memperbarui daftar kontrol akses (ACL) direktori dan file, lihat Menggunakan Java untuk mengelola ACL di Azure Data Lake Storage Gen2.

Paket (Maven) | Sampel | Referensi API | Pemetaan Gen1 ke Gen2 | Beri Umpan Balik

Prasyarat

Menyiapkan proyek Anda

Untuk memulai, buka halaman ini dan temukan versi terbaru pustaka Java. Lalu, buka file pom.xml di editor teks Anda. Tambahkan elemen dependensi yang mereferensikan versi tersebut.

Jika Anda berencana untuk mengautentikasi aplikasi klien Anda dengan menggunakan ID Microsoft Entra, tambahkan dependensi ke pustaka Azure Identity. Untuk informasi selengkapnya, lihat Pustaka klien Azure Identity untuk Java.

Selanjutnya, tambahkan pernyataan impor ini ke file kode Anda.

import com.azure.identity.*;
import com.azure.storage.common.StorageSharedKeyCredential;
import com.azure.core.http.rest.PagedIterable;
import com.azure.core.util.BinaryData;
import com.azure.storage.file.datalake.*;
import com.azure.storage.file.datalake.models.*;
import com.azure.storage.file.datalake.options.*;

Catatan

Akses multi-protokol pada Data Lake Storage memungkinkan aplikasi menggunakan API Blob dan API Data Lake Storage Gen2 untuk bekerja dengan data di akun penyimpanan dengan namespace hierarkis (HNS) diaktifkan. Saat bekerja dengan kemampuan yang unik untuk Data Lake Storage Gen2, seperti operasi direktori dan ACL, gunakan API Data Lake Storage Gen2, seperti yang ditunjukkan dalam artikel ini.

Saat memilih API mana yang akan digunakan dalam skenario tertentu, pertimbangkan beban kerja dan kebutuhan aplikasi Anda, bersama dengan masalah yang diketahui dan dampak HNS pada beban kerja dan aplikasi.

Mengotorisasi akses dan menyambungkan ke sumber daya data

Untuk bekerja dengan contoh kode dalam artikel ini, Anda perlu membuat instans DataLakeServiceClient resmi yang mewakili akun penyimpanan. Anda dapat mengotorisasi DataLakeServiceClient objek menggunakan ID Microsoft Entra, kunci akses akun, atau tanda tangan akses bersama (SAS).

Anda dapat menggunakan pustaka klien identitas Azure untuk Java untuk mengautentikasi aplikasi Anda dengan ID Microsoft Entra.

Buat instans DataLakeServiceClient dan teruskan instans baru kelas DefaultAzureCredential .

static public DataLakeServiceClient GetDataLakeServiceClient(String accountName){
    DefaultAzureCredential defaultCredential = new DefaultAzureCredentialBuilder().build();

    DataLakeServiceClient dataLakeServiceClient = new DataLakeServiceClientBuilder()
        .endpoint("https://" + accountName + ".dfs.core.windows.net")
        .credential(defaultCredential)
        .buildClient();

    return dataLakeServiceClient;
}

Untuk mempelajari selengkapnya tentang menggunakan DefaultAzureCredential untuk mengotorisasi akses ke data, lihat Pustaka klien Azure Identity untuk Java.

Membuat kontainer

Kontainer bertindak sebagai sistem file untuk file Anda. Anda dapat membuat kontainer dengan menggunakan metode berikut:

Contoh kode berikut membuat kontainer dan mengembalikan objek DataLakeFileSystemClient untuk digunakan nanti:

public DataLakeFileSystemClient CreateFileSystem(
        DataLakeServiceClient serviceClient,
        String fileSystemName) {

    DataLakeFileSystemClient fileSystemClient = serviceClient.createFileSystem(fileSystemName);

    return fileSystemClient;
}

Membuat direktori

Anda dapat membuat referensi direktori dalam kontainer dengan menggunakan metode berikut:

Contoh kode berikut menambahkan direktori ke kontainer, lalu menambahkan subdirektori dan mengembalikan objek DataLakeDirectoryClient untuk digunakan nanti:

public DataLakeDirectoryClient CreateDirectory(
        DataLakeFileSystemClient fileSystemClient,
        String directoryName,
        String subDirectoryName) {

    DataLakeDirectoryClient directoryClient = fileSystemClient.createDirectory(directoryName);

    return directoryClient.createSubdirectory(subDirectoryName);
}

Ganti nama atau pindahkan direktori

Anda dapat mengganti nama atau memindahkan direktori dengan menggunakan metode berikut:

Lewati jalur direktori yang diinginkan sebagai parameter. Contoh kode berikut menunjukkan cara mengganti nama subdirektori:

public DataLakeDirectoryClient RenameDirectory(
        DataLakeFileSystemClient fileSystemClient,
        String directoryPath,
        String subdirectoryName,
        String subdirectoryNameNew) {

    DataLakeDirectoryClient directoryClient = fileSystemClient
            .getDirectoryClient(String.join("/", directoryPath, subdirectoryName));

    return directoryClient.rename(
            fileSystemClient.getFileSystemName(),
            String.join("/", directoryPath, subdirectoryNameNew));
}

Contoh kode berikut menunjukkan cara memindahkan subdirektori dari satu direktori ke direktori lain:

public DataLakeDirectoryClient MoveDirectory(
        DataLakeFileSystemClient fileSystemClient,
        String directoryPathFrom,
        String directoryPathTo,
        String subdirectoryName) {

    DataLakeDirectoryClient directoryClient = fileSystemClient
            .getDirectoryClient(String.join("/", directoryPathFrom, subdirectoryName));

    return directoryClient.rename(
            fileSystemClient.getFileSystemName(),
            String.join("/", directoryPathTo, subdirectoryName));
}

Unggah file ke direktori

Anda dapat mengunggah konten ke file baru atau yang sudah ada dengan menggunakan metode berikut:

Contoh kode berikut menunjukkan cara mengunggah file lokal ke direktori menggunakan uploadFromFile metode :

public void UploadFile(
        DataLakeDirectoryClient directoryClient,
        String fileName) {

    DataLakeFileClient fileClient = directoryClient.getFileClient(fileName);

    fileClient.uploadFromFile("filePath/sample-file.txt");
}

Anda dapat menggunakan metode ini untuk membuat dan mengunggah konten ke file baru, atau Anda dapat mengatur overwrite parameter ke true untuk menimpa file yang ada.

Menambahkan data ke file

Anda dapat mengunggah data untuk ditambahkan ke file dengan menggunakan metode berikut:

Contoh kode berikut menunjukkan cara menambahkan data ke akhir file menggunakan langkah-langkah berikut:

  • Buat DataLakeFileClient objek untuk mewakili sumber daya file yang sedang Anda kerjakan.
  • Unggah data ke file menggunakan DataLakeFileClient.append metode .
  • Selesaikan unggahan dengan memanggil DataLakeFileClient.flush metode untuk menulis data yang diunggah sebelumnya ke file.
public void AppendDataToFile(
        DataLakeDirectoryClient directoryClient) {

    DataLakeFileClient fileClient = directoryClient.getFileClient("sample-file.txt");
    long fileSize = fileClient.getProperties().getFileSize();

    String sampleData = "Data to append to end of file";
    fileClient.append(BinaryData.fromString(sampleData), fileSize);

    fileClient.flush(fileSize + sampleData.length(), true);
}

Unduh dari direktori

Contoh kode berikut menunjukkan cara mengunduh file dari direktori ke file lokal menggunakan langkah-langkah berikut:

  • Buat DataLakeFileClient objek untuk mewakili file yang ingin Anda unduh.
  • DataLakeFileClient.readToFile Gunakan metode untuk membaca file. Contoh ini mengatur overwrite parameter ke true, yang menimpa file yang ada.
public void DownloadFile(
        DataLakeDirectoryClient directoryClient,
        String fileName) {

    DataLakeFileClient fileClient = directoryClient.getFileClient(fileName);

    fileClient.readToFile("filePath/sample-file.txt", true);
}

Daftar isi direktori

Anda dapat mencantumkan konten direktori dengan menggunakan metode berikut dan menghitung hasilnya:

Menghitung jalur dalam hasil dapat membuat beberapa permintaan ke layanan sambil mengambil nilai.

Contoh kode berikut mencetak nama setiap file yang terletak di direktori:

public void ListFilesInDirectory(
        DataLakeFileSystemClient fileSystemClient,
        String directoryName) {

    ListPathsOptions options = new ListPathsOptions();
    options.setPath(directoryName);

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

}

Hapus direktori

Anda dapat menghapus direktori dengan menggunakan salah satu metode berikut:

Contoh kode berikut menggunakan deleteWithResponse untuk menghapus direktori yang tidak ada dan semua jalur di bawah direktori:

public void DeleteDirectory(
        DataLakeFileSystemClient fileSystemClient,
        String directoryName) {

    DataLakeDirectoryClient directoryClient = fileSystemClient.getDirectoryClient(directoryName);

    // Set to true to delete all paths beneath the directory
    boolean recursive = true;

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

Lihat juga