Поделиться через


Разработка приложений Java, использующих Файлы Azure

Ознакомьтесь с основами разработки приложений Java, которые используют Файлы Azure для хранения данных. Создайте консольное приложения и изучите основные действия с использованием API Файлов Azure.

  • Создание и удаление общих папок Azure.
  • Создание и удаление каталогов.
  • Перечисление файлов и каталогов в общей папке Azure
  • Передача, загрузка и удаление файлов.

Совет

См. примеры кода в репозитории службы хранилища Azure

Полные и простые в применении примеры кода для службы хранилища Azure можно скачать и запустить отсюда.

Применяется к

Тип общей папки SMB NFS
Стандартные общие папки (GPv2), LRS/ZRS Да Нет
Стандартные общие папки (GPv2), GRS/GZRS Да Нет
Общие папки уровня "Премиум" (FileStorage), LRS/ZRS Да Нет

Создание приложения Java

Для создания примеров вам потребуется пакет SDK для Java (JDK) и пакет SDK для службы хранилища Azure для Java. Вам также потребуется учетная запись хранения Azure.

Настройка приложения для работы со службой файлов Azure

Чтобы использовать API-интерфейсы Файлов Azure, добавьте указанный ниже код в начало файла Java, из которого вы собираетесь получить доступ к Файлам Azure.

// Include the following imports to use Azure Files APIs
import com.azure.storage.file.share.*;

Настройка строки подключения к хранилищу Azure

Для использования файлов Azure необходимо подключиться к учетной записи хранения Azure. Настройте строку подключения и используйте ее для подключения к учетной записи хранения. Определите статическую переменную для хранения строки подключения.

Замените <storage_account_name> и <storage_account_key> на фактические значения для вашей учетной записи.

// Define the connection-string.
// Replace the values, including <>, with
// the values from your storage account.
public static final String connectStr = 
   "DefaultEndpointsProtocol=https;" +
   "AccountName=<storage_account_name>;" +
   "AccountKey=<storage_account_key>";

Доступ к общей папке Azure

Чтобы получить доступ к Файлам Azure, создайте объект ShareClient. Используйте класс ShareClientBuilder для создания объекта ShareClient.

ShareClient shareClient = new ShareClientBuilder()
    .connectionString(connectStr).shareName(shareName)
    .buildClient();

Создание общей папки

Все файлы и каталоги в Файлах Azure сохранены в контейнере, который называется общей папкой.

Метод ShareClient.create создает исключение, если общая папка уже существует. Выполните вызов create в блоке try/catch и обработайте исключение.

public static Boolean createFileShare(String connectStr, String shareName)
{
    try
    {
        ShareClient shareClient = new ShareClientBuilder()
            .connectionString(connectStr).shareName(shareName)
            .buildClient();

        shareClient.create();
        return true;
    }
    catch (Exception e)
    {
        System.out.println("createFileShare exception: " + e.getMessage());
        return false;
    }
}

Удаление общей папки

В приведенном ниже примере кода удаляется общая папка.

Удалите общую папку, вызвав метод ShareClient.delete.

public static Boolean deleteFileShare(String connectStr, String shareName)
{
    try
    {
        ShareClient shareClient = new ShareClientBuilder()
            .connectionString(connectStr).shareName(shareName)
            .buildClient();

        shareClient.delete();
        return true;
    }
    catch (Exception e)
    {
        System.out.println("deleteFileShare exception: " + e.getMessage());
        return false;
    }
}

Создание каталога

Вы можете упорядочить файлы в хранилище, разместив их в подкаталогах, чтобы не переполнять корневой каталог.

Приведенный ниже код создает каталог путем вызова ShareDirectoryClient.create. В примере метода возвращается значение Boolean, указывающее, успешно ли создан каталог.

public static Boolean createDirectory(String connectStr, String shareName,
                                        String dirName)
{
    try
    {
        ShareDirectoryClient dirClient = new ShareFileClientBuilder()
             .connectionString(connectStr).shareName(shareName)
             .resourcePath(dirName)
             .buildDirectoryClient();

        dirClient.create();
        return true;
    }
    catch (Exception e)
    {
        System.out.println("createDirectory exception: " + e.getMessage());
        return false;
    }
}

Удаление каталога

Удаление каталога является относительно простой задачей. Невозможно удалить каталог, который содержит файлы или подкаталоги.

Метод ShareDirectoryClient.delete выдает исключение, если каталог не существует или не является пустым. Выполните вызов delete в блоке try/catch и обработайте исключение.

public static Boolean deleteDirectory(String connectStr, String shareName,
                                        String dirName)
{
    try
    {
        ShareDirectoryClient dirClient = new ShareFileClientBuilder()
             .connectionString(connectStr).shareName(shareName)
             .resourcePath(dirName)
             .buildDirectoryClient();

        dirClient.delete();
        return true;
    }
    catch (Exception e)
    {
        System.out.println("deleteDirectory exception: " + e.getMessage());
        return false;
    }
}

Перечисление файлов и каталогов в общей папке Azure

Получите список файлов и каталогов, вызвав ShareDirectoryClient.listFilesAndDirectories. Метод возвращает список объектов ShareFileItem, с которым вы можете производить дальнейшие действия. Следующий код перечисляет файлы и каталоги внутри каталога, указанного с помощью параметра dirName.

public static Boolean enumerateFilesAndDirs(String connectStr, String shareName,
                                                String dirName)
{
    try
    {
        ShareDirectoryClient dirClient = new ShareFileClientBuilder()
             .connectionString(connectStr).shareName(shareName)
             .resourcePath(dirName)
             .buildDirectoryClient();

        dirClient.listFilesAndDirectories().forEach(
            fileRef -> System.out.printf("Resource: %s\t Directory? %b\n",
            fileRef.getName(), fileRef.isDirectory())
        );

        return true;
    }
    catch (Exception e)
    {
        System.out.println("enumerateFilesAndDirs exception: " + e.getMessage());
        return false;
    }
}

Отправка файла

Узнайте, как отправить файл из локального хранилища.

Приведенный ниже код передает локальный файл в Файлы Azure с помощью вызова метода ShareFileClient.uploadFromFile. В приведенном ниже примере метод возвращает значение Boolean, указывающее, успешно ли отправлен указанный файл.

public static Boolean uploadFile(String connectStr, String shareName,
                                    String dirName, String fileName)
{
    try
    {
        ShareDirectoryClient dirClient = new ShareFileClientBuilder()
             .connectionString(connectStr).shareName(shareName)
             .resourcePath(dirName)
             .buildDirectoryClient();

        ShareFileClient fileClient = dirClient.getFileClient(fileName);
        fileClient.create(1024);
        fileClient.uploadFromFile(fileName);
        return true;
    }
    catch (Exception e)
    {
        System.out.println("uploadFile exception: " + e.getMessage());
        return false;
    }
}

Скачивание файла

Одна из наиболее частых операций — скачивание файлов из общей папки Файлов Azure.

В приведенном ниже примере указанный файл скачивается в локальный каталог, указанный с помощью параметра destDir. В примере метод делает скачанное имя файла уникальным, добавляя дату и время.

public static Boolean downloadFile(String connectStr, String shareName,
                                    String dirName, String destDir,
                                        String fileName)
{
    try
    {
        ShareDirectoryClient dirClient = new ShareFileClientBuilder()
             .connectionString(connectStr).shareName(shareName)
             .resourcePath(dirName)
             .buildDirectoryClient();

        ShareFileClient fileClient = dirClient.getFileClient(fileName);

        // Create a unique file name
        String date = new java.text.SimpleDateFormat("yyyyMMdd-HHmmss").format(new java.util.Date());
        String destPath = destDir + "/"+ date + "_" + fileName;

        fileClient.downloadToFile(destPath);
        return true;
    }
    catch (Exception e)
    {
        System.out.println("downloadFile exception: " + e.getMessage());
        return false;
    }
}

Удаление файла

Другая распространенная операция в службе файлов Azure — это удаление файлов.

Приведенный ниже код удаляет указанный файл. Сначала в примере создается ShareDirectoryClient на основе параметра dirName. Затем код получает ShareFileClient от клиента каталога на основе параметра filename. Наконец, метод примера вызывает ShareFileClient.delete для удаления файла.

public static Boolean deleteFile(String connectStr, String shareName,
                                    String dirName, String fileName)
{
    try
    {
        ShareDirectoryClient dirClient = new ShareFileClientBuilder()
             .connectionString(connectStr).shareName(shareName)
             .resourcePath(dirName)
             .buildDirectoryClient();

        ShareFileClient fileClient = dirClient.getFileClient(fileName);
        fileClient.delete();
        return true;
    }
    catch (Exception e)
    {
        System.out.println("deleteFile exception: " + e.getMessage());
        return false;
    }
}

Следующие шаги

Если вы хотите узнать больше о других API-интерфейсах Azure, пожалуйста перейдите по следующим ссылкам.

Связанные примеры кода с использованием устаревших пакетов SDK для Java версии 8 см. в примерах кода с помощью Java версии 8.