Desarrollo con Java para Azure Files

Aprenda los conceptos básicos de desarrollar aplicaciones de Java que usen Azure Files para almacenar datos. Cree una aplicación de consola y aprenda las acciones básicas sobre el uso de las API de Azure Files:

  • Crear y eliminar recursos compartidos de archivos de Azure
  • Crear y eliminar directorios
  • Enumerar los archivos y directorios de un recurso compartido de Azure File
  • Cargar, descargar y eliminar un archivo

Sugerencia

Extraer del repositorio ejemplos de código de Azure Storage

Para encontrar ejemplos de código de Azure Storage de un extremo a otro y fáciles de usar que se pueden descargar y ejecutar, consulte nuestra lista de ejemplos de Azure Storage.

Se aplica a

Tipo de recurso compartido de archivos SMB NFS
Recursos compartidos de archivos Estándar (GPv2), LRS/ZRS Sí No
Recursos compartidos de archivos Estándar (GPv2), GRS/GZRS Sí No
Recursos compartidos de archivos Premium (FileStorage), LRS/ZRS Sí No

Creación de una aplicación Java

Para compilar las muestras, se necesitará el Kit de desarrollo de Java (JDK) y el SDK de Azure Storage para Java. También deberá haber creado una cuenta de almacenamiento de Azure.

Configuración de la aplicación para usar Azure Files

Para utilizar las API de Azure Files, agregue el siguiente código al principio del archivo Java desde el que desea acceder a Azure Files.

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

Configuración de una cadena de conexión de Almacenamiento de Azure

Para usar Azure Files, debe conectarse a su cuenta de almacenamiento de Azure. Configure una cadena de conexión y úsela para conectarse a su cuenta de almacenamiento. Defina una variable estática que contenga la cadena de conexión.

Reemplace <your_storage_account_name> y <your_storage_account_key> por los valores reales de la cuenta de almacenamiento.

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

Acceso a un recurso compartido de archivos de Azure

Para acceder a Azure Files, cree un objeto ShareClient. Use la clase ShareClientBuilder para crear un nuevo objeto ShareClient.

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

Creación de un recurso compartido de archivos

Todos los archivos y directorios de Azure Files se almacenan en un contenedor denominado recurso compartido.

El método ShareClient.create produce una excepción si el recurso compartido ya existe. Coloque la llamada a create en un bloque try/catch y controle la excepción.

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

Eliminación de un recurso compartido de archivos

En el siguiente código de ejemplo se elimina un recurso compartido de archivos.

Elimine un recurso compartido llamando al 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;
    }
}

Creación de un directorio

Para organizar el almacenamiento, coloque los archivos en los subdirectorios, en lugar de mantenerlos todos en el directorio raíz.

En el código siguiente se crea un directorio llamando a ShareDirectoryClient.create. El método de ejemplo devuelve un valor Boolean que indica si se el directorio creó correctamente.

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

Eliminación de un directorio

Eliminar un directorio es una tarea sencilla. No se puede eliminar un directorio que todavía contenga archivos o subdirectorios.

El método ShareDirectoryClient.delete produce una excepción si el directorio no existe o no está vacío. Coloque la llamada a delete en un bloque try/catch y controle la excepción.

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 los archivos y directorios de un recurso compartido de Azure File

Obtenga una lista de archivos y directorios llamando ShareDirectoryClient.listFilesAndDirectories. El método devuelve una lista de objetos ShareFileItem en los que puede efectuar la iteración. En el código siguiente se enumeran los archivos y directorios del directorio especificado por el 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;
    }
}

Cargar un archivo

Obtenga información sobre cómo cargar un archivo desde el almacenamiento local.

El código siguiente carga un archivo local en Azure Files mediante una llamada al método ShareFileClient.uploadFromFile. El método de ejemplo siguiente devuelve un valor Boolean que indica si el archivo especificado se cargó correctamente.

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

Descarga de un archivo

Una de las operaciones más frecuentes es descargar archivos de un recurso compartido de archivos de Azure.

En el siguiente ejemplo se descarga el archivo especificado en el directorio local especificado en el parámetro destDir. El método de ejemplo hace que el nombre de archivo descargado sea único al anteponer la fecha y la 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;
    }
}

Eliminación de un archivo

Otra operación habitual en Azure Files es la eliminación de archivos.

En el código siguiente se elimina el archivo especificado. En primer lugar, el ejemplo crea un método ShareDirectoryClient basándose en el parámetro dirName. A continuación, el código obtiene un ShareFileClient desde el cliente de directorio, basado en el parámetro fileName. Por último, el método de ejemplo llama a ShareFileClient.delete para eliminar el archivo.

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

Pasos siguientes

Si desea obtener más información acerca de otras API de almacenamiento de Azure, siga estos vínculos.

Para ver ejemplos de código relacionados que usan SDK de la versión 8 de Java en desuso, consulte Ejemplos de código que usan la versión 8 de Java.