Java를 사용하여 Azure Files 개발

Azure Files를 사용하여 데이터를 저장하는 Java 애플리케이션 개발에 대한 기본 사항을 알아봅니다. 콘솔 애플리케이션을 만들고 Azure Files API를 사용하는 기본 작업을 알아봅니다.

  • Azure 파일 공유 만들기 및 삭제
  • 디렉터리 만들기 및 삭제
  • Azure 파일 공유의 파일 및 디렉터리 열거
  • 파일 업로드, 다운로드 및 삭제

Azure Storage 코드 샘플 리포지토리 확인

다운로드하고 실행할 수 있는 엔드투엔드 Azure Storage 코드 샘플을 쉽게 사용하려면 Azure Storage 샘플 목록을 확인하세요.

적용 대상

파일 공유 유형 SMB NFS
표준 파일 공유(GPv2), LRS/ZRS Yes No
표준 파일 공유(GPv2), GRS/GZRS Yes No
프리미엄 파일 공유(FileStorage), LRS/ZRS Yes No

Java 애플리케이션 만들기

샘플을 빌드하려면 JDK(Java 개발 키트)와 Java용 Azure Storage SDK가 필요합니다. Azure Storage 계정도 만들었어야 합니다.

Azure Files를 사용하도록 애플리케이션 설정

Azure Files API를 사용하려면 Azure Files에 액세스하려는 Java 파일 맨 위에 다음 코드를 추가합니다.

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

Azure Storage 연결 문자열 설정

Azure Files를 사용하려면 Azure Storage 계정에 연결해야 합니다. 연결 문자열을 구성하고 사용하여 스토리지 계정에 연결합니다. 연결 문자열을 저장할 정적 변수를 정의합니다.

<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 Files에 액세스하려면 ShareClient 개체를 만듭니다. ShareClientBuilder 클래스를 사용하여 새 ShareClient 개체를 빌드합니다.

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

파일 공유 만들기

Azure Files의 모든 파일과 디렉터리는 공유라고 하는 컨테이너에 저장됩니다.

공유가 이미 있으면 ShareClient.create 메서드에서 예외가 발생합니다. 호출을 try/catch 블록의 create에 넣고 예외를 처리합니다.

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 메서드에서 예외가 발생합니다. 호출을 try/catch 블록의 delete에 넣고 예외를 처리합니다.

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

파일 업로드

로컬 스토리지에서 파일을 업로드하는 방법을 알아봅니다.

다음 코드에서는 ShareFileClient.uploadFromFile 메서드를 호출하여 로컬 파일을 Azure Files에 업로드합니다. 다음 예제 메서드는 지정된 파일이 성공적으로 업로드됐는지 여부를 나타내는 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 Files 작업은 파일 삭제입니다.

다음 코드에서는 지정된 파일을 삭제합니다. 먼저 예제에서는 dirName 매개 변수에 따라 ShareDirectoryClient를 만듭니다. 그런 다음, 코드는 fileName 매개 변수에 따라 디렉터리 클라이언트에서 ShareFileClient를 가져옵니다. 마지막으로 예제 메서드에서 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;
    }
}

다음 단계

다른 Azure Storage API에 대해 더 알아보려면 다음 링크를 따르십시오.

사용되지 않는 Java 버전 8 SDK를 사용하는 관련 코드 샘플은 Java 버전 8을 사용하는 코드 샘플을 참조하세요.