Programar para os Ficheiros do Azure com Java

Aprenda as noções básicas sobre o desenvolvimento de aplicações Java que utilizam Ficheiros do Azure para armazenar dados. Crie uma aplicação de consola e aprenda ações básicas com Ficheiros do Azure APIs:

  • Criar e eliminar partilhas de ficheiros do Azure
  • Criar e eliminar diretórios
  • Enumerar ficheiros e diretórios numa partilha de ficheiros do Azure
  • Carregar, transferir e eliminar um ficheiro

Dica

Veja o repositório de amostras de código do Armazenamento do Azure

Para obter exemplos de código de Armazenamento do Azure ponto a ponto fáceis de utilizar que pode transferir e executar, veja a nossa lista de Exemplos de Armazenamento do Azure.

Aplica-se a

Tipo de partilhas de ficheiros SMB NFS
Partilhas de ficheiros Standard (GPv2), LRS/ZRS Yes No
Partilhas de ficheiros Standard (GPv2), GRS/GZRS Yes No
Partilhas de ficheiros Premium (FileStorage), LRS/ZRS Yes No

Criar uma aplicação Java

Para criar os exemplos, precisará do Java Development Kit (JDK) e do SDK de Armazenamento do Azure para Java. Também deve ter criado uma conta de armazenamento do Azure.

Configurar a aplicação para utilizar Ficheiros do Azure

Para utilizar as APIs Ficheiros do Azure, adicione o seguinte código à parte superior do ficheiro Java a partir do qual pretende aceder Ficheiros do Azure.

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

Configurar uma cadeia de ligação de armazenamento do Azure

Para utilizar Ficheiros do Azure, tem de se ligar à sua conta de armazenamento do Azure. Configure uma cadeia de ligação e utilize-a para ligar à sua conta de armazenamento. Defina uma variável estática para manter a cadeia de ligação.

Substitua <storage_account_name> e <storage_account_key> pelos valores reais da sua conta de armazenamento.

// 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>";

Aceder a uma partilha de ficheiros do Azure

Para aceder Ficheiros do Azure, crie um objeto ShareClient. Utilize a classe ShareClientBuilder para criar um novo objeto ShareClient .

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

Criar uma partilha de ficheiros

Todos os ficheiros e diretórios no Ficheiros do Azure são armazenados num contentor denominado partilha.

O método ShareClient.create gera uma exceção se a partilha já existir. Coloque a chamada para criar num try/catch bloco e processe a exceção.

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

Eliminar partilhas de ficheiros

O seguinte código de exemplo elimina uma partilha de ficheiros.

Elimine uma partilha ao chamar o método 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;
    }
}

Criar um diretório

Organize o armazenamento colocando ficheiros dentro de subdiretórios em vez de os ter todos no diretório de raiz.

O código seguinte cria um diretório ao chamar ShareDirectoryClient.create. O método de exemplo devolve um Boolean valor que indica se criou o diretório com êxito.

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

Eliminar um diretório

Eliminar um diretório é uma tarefa simples. Não pode eliminar um diretório que ainda contenha ficheiros ou subdiretórios.

O método ShareDirectoryClient.delete gera uma exceção se o diretório não existir ou não estiver vazio. Coloque a chamada para eliminar num try/catch bloco e processe a exceção.

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

Enumerar ficheiros e diretórios numa partilha de ficheiros do Azure

Obtenha uma lista de ficheiros e diretórios ao chamar ShareDirectoryClient.listFilesAndDirectories. O método devolve uma lista de objetos ShareFileItem nos quais pode iterar. O código seguinte lista ficheiros e diretórios dentro do diretório especificado pelo parâmetro 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;
    }
}

Carregar um ficheiro

Saiba como carregar um ficheiro a partir do armazenamento local.

O código seguinte carrega um ficheiro local para Ficheiros do Azure ao chamar o método ShareFileClient.uploadFromFile. O método de exemplo seguinte devolve um Boolean valor que indica se carregou com êxito o ficheiro especificado.

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

Transferir um ficheiro

Uma das operações mais frequentes é transferir ficheiros de uma partilha de ficheiros do Azure.

O exemplo seguinte transfere o ficheiro especificado para o diretório local especificado no parâmetro destDir . O método de exemplo torna o nome de ficheiro transferido exclusivo ao prefixar a data e a hora.

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

Eliminar um ficheiro

Outra operação de Ficheiros do Azure comum é a eliminação de ficheiros.

O código seguinte elimina o ficheiro especificado. Primeiro, o exemplo cria um ShareDirectoryClient com base no parâmetro dirName . Em seguida, o código obtém um ShareFileClient do cliente de diretório, com base no parâmetro fileName . Por fim, o método de exemplo chama ShareFileClient.delete para eliminar o ficheiro.

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

Passos seguintes

Se quiser saber mais sobre outras APIs de armazenamento do Azure, siga estas ligações.

Para obter exemplos de código relacionados com SDKs da versão 8 do Java preterido, veja Exemplos de código com a versão 8 do Java.