使用 Java 针对 Azure 文件进行开发

Tip

查看 Azure 存储代码示例存储库

若要获取能够下载和运行且易于使用的端到端 Azure 存储代码,请查看我们提供的 Azure 存储示例列表。

关于本教程

本教程将演示使用 Java 开发应用程序或服务的基础知识,这些应用程序或服务可以使用 Azure 文件来存储文件数据。 在本教程中,我们将创建一个控制台应用程序,并演示如何通过 Java 和 Azure 文件执行基本操作:

  • 创建和删除 Azure 文件共享
  • 创建和删除目录
  • 枚举 Azure 文件共享中的文件和目录
  • 上传、下载和删除文件

Note

由于 Azure 文件可以通过 SMB 进行访问,因此可以编写应用程序,通过标准的 Java I/O 类来访问 Azure 文件共享。 本文介绍如何编写使用 Azure 存储 Java SDK 的应用程序,该 SDK 使用 Azure 文件 REST API 与 Azure 文件通信。

创建 Java 应用程序

若要生成示例,需要 Java 开发工具包 (JDK) 和用于 Java 的 Azure 存储 SDK。 此外,应该已经创建了一个 Azure 存储帐户。

设置应用程序以使用 Azure 文件

要使用 Azure 存储 API,请将下列语句添加到要通过其来访问存储服务的 Java 文件的顶部:

// Include the following imports to use blob APIs.
import com.microsoft.azure.storage.*;
import com.microsoft.azure.storage.file.*;

设置 Azure 存储连接字符串

要使用 Azure 文件,需要连接到 Azure 存储帐户。 第一步是配置连接字符串,该字符串用于连接到存储帐户。 为此,我们需要定义一个静态变量。

// Configure the connection-string with your values
public static final String storageConnectionString =
    "DefaultEndpointsProtocol=http;" +
    "AccountName=your_storage_account_name;" +
    "AccountKey=your_storage_account_key;" +
    "EndpointSuffix=core.Chinacloudapi.cn";

Note

将 your_storage_account_name 和 your_storage_account_key 替换为存储帐户的实际值。

连接到 Azure 存储帐户

若要连接到存储帐户,需要使用 CloudStorageAccount 对象,将连接字符串传递到其 parse 方法。

// Use the CloudStorageAccount object to connect to your storage account
try {
    CloudStorageAccount storageAccount = CloudStorageAccount.parse(storageConnectionString);
} catch (InvalidKeyException invalidKey) {
    // Handle the exception
}

CloudStorageAccount.parse 会引发 InvalidKeyException,因此恤将其置于 try/catch 块内。

创建 Azure 文件共享

Azure 文件中的所有文件和目录都位于名为 Share 的容器内。 存储帐户可以拥有无数的共享,只要帐户容量允许。 要获得共享及其内容的访问权限,需要使用 Azure 文件客户端。

// Create the Azure Files client.
CloudFileClient fileClient = storageAccount.createCloudFileClient();

使用 Azure 文件客户端可以获取对共享的引用。

// Get a reference to the file share
CloudFileShare share = fileClient.getShareReference("sampleshare");

实际创建共享时,请使用 CloudFileShare 对象的 createIfNotExists 方法。

if (share.createIfNotExists()) {
    System.out.println("New share created");
}

而在目前,share 保留对名为 sampleshare 的共享的引用。

删除 Azure 文件共享

删除共享时,可针对 CloudFileShare 对象调用 deleteIfExists 方法。 以下是具有此类功能的示例代码。

try
{
    // Retrieve storage account from connection-string.
    CloudStorageAccount storageAccount = CloudStorageAccount.parse(storageConnectionString);

    // Create the file client.
   CloudFileClient fileClient = storageAccount.createCloudFileClient();

   // Get a reference to the file share
   CloudFileShare share = fileClient.getShareReference("sampleshare");

   if (share.deleteIfExists()) {
       System.out.println("sampleshare deleted");
   }
} catch (Exception e) {
    e.printStackTrace();
}

创建目录

也可以将文件置于子目录中,不必将其全部置于根目录中,以便对存储进行有效的组织。 使用 Azure 文件可以创建帐户允许的任意数目的目录。 以下代码会在根目录下创建名为 sampledir 的子目录。

//Get a reference to the root directory for the share.
CloudFileDirectory rootDir = share.getRootDirectoryReference();

//Get a reference to the sampledir directory
CloudFileDirectory sampleDir = rootDir.getDirectoryReference("sampledir");

if (sampleDir.createIfNotExists()) {
    System.out.println("sampledir created");
} else {
    System.out.println("sampledir already exists");
}

删除目录

删除目录很简单,但需注意的是,不能删除仍然包含文件或其他目录的目录。

// Get a reference to the root directory for the share.
CloudFileDirectory rootDir = share.getRootDirectoryReference();

// Get a reference to the directory you want to delete
CloudFileDirectory containerDir = rootDir.getDirectoryReference("sampledir");

// Delete the directory
if ( containerDir.deleteIfExists() ) {
    System.out.println("Directory deleted");
}

枚举 Azure 文件共享中的文件和目录

可以轻松获取共享中文件和目录的列表,只需针对 CloudFileDirectory 引用调用 listFilesAndDirectories 即可。 该方法会返回可以对其进行循环访问的 ListFileItem 对象的列表。 例如,下面的代码列出根目录中的文件和目录。

//Get a reference to the root directory for the share.
CloudFileDirectory rootDir = share.getRootDirectoryReference();

for ( ListFileItem fileItem : rootDir.listFilesAndDirectories() ) {
    System.out.println(fileItem.getUri());
}

上传文件

本部分会介绍如何将文件从本地存储上传到共享所在的根目录。

上传文件的第一步是获取对文件所在的目录的引用。 为此,需要调用共享对象的 getRootDirectoryReference 方法。

//Get a reference to the root directory for the share.
CloudFileDirectory rootDir = share.getRootDirectoryReference();

现在,已经有了共享所在的根目录的引用,因此可以使用以下代码来上传文件。

        // Define the path to a local file.
        final String filePath = "C:\\temp\\Readme.txt";

        CloudFile cloudFile = rootDir.getFileReference("Readme.txt");
        cloudFile.uploadFromFile(filePath);

下载文件

对于 Azure 文件,需要更频繁执行的一项操作是下载文件。 在下面的示例中,代码会下载 SampleFile.txt 并显示其内容。

//Get a reference to the root directory for the share.
CloudFileDirectory rootDir = share.getRootDirectoryReference();

//Get a reference to the directory that contains the file
CloudFileDirectory sampleDir = rootDir.getDirectoryReference("sampledir");

//Get a reference to the file you want to download
CloudFile file = sampleDir.getFileReference("SampleFile.txt");

//Write the contents of the file to the console.
System.out.println(file.downloadText());

删除文件

另一项常见的 Azure 文件操作是删除文件。 下面的代码会删除名为 SampleFile.txt 的文件,该文件存储在名为 sampledir的目录中。

// Get a reference to the root directory for the share.
CloudFileDirectory rootDir = share.getRootDirectoryReference();

// Get a reference to the directory where the file to be deleted is in
CloudFileDirectory containerDir = rootDir.getDirectoryReference("sampledir");

String filename = "SampleFile.txt"
CloudFile file;

file = containerDir.getFileReference(filename)
if ( file.deleteIfExists() ) {
    System.out.println(filename + " was deleted");
}

后续步骤

如果还想更多地了解其他 Azure 存储 API,请点击以下链接。