了解开发使用 Azure 文件存储来存储数据的 Java 应用程序的基础知识。 使用 Azure 文件存储 API 创建控制台应用程序并了解基本操作:

  • 创建和删除 Azure 文件共享
  • 创建和删除目录
  • 枚举 Azure 文件共享中的文件和目录
  • 上传、下载和删除文件
  • 查看 Azure 存储代码示例存储库

    如需易用且能够下载和运行的端到端 Azure 存储代码示例,请查看我们的 Azure 存储示例 列表。

    文件共享类型

    创建 Java 应用程序

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

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

    若要使用 Azure 文件存储 API,请将以下代码添加到要通过其访问 Azure 文件存储的 Java 文件的顶部。

    // 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) 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) 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) 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) 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) 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 文件存储。 以下示例方法返回一个 Boolean 值,该值指示它是否成功上传了指定的文件。

    public static Boolean uploadFile(String connectStr, String shareName, String dirName, String fileName) 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) 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 文件操作是删除文件。

    以下代码将删除指定文件。 首先,该示例基于 dirName 参数创建一个 ShareDirectoryClient 。 然后,代码根据 fileName 参数从目录客户端获取 ShareFileClient 。 最后,示例方法调用 ShareFileClient.delete 来删除文件。

    public static Boolean deleteFile(String connectStr, String shareName, String dirName, String fileName) 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 存储 API,请点击以下链接。

  • 面向 Java 开发人员的 Azure
  • Azure SDK for Java
  • 适用于 Android 的 Azure SDK
  • 适用于 Java SDK 的 Azure 文件共享客户端库参考
  • Azure 存储空间服务 REST API
  • Azure 存储团队博客
  • 使用 AzCopy 命令行实用工具传输数据
  • 对 Azure 文件进行故障排除
  • 有关使用已弃用的 Java 版本 8 SDK 的相关代码示例,请参阅 使用 Java 版本 8 的代码示例