开发使用 Azure 文件存储的 Java 应用程序
了解开发使用 Azure 文件存储来存储数据的 Java 应用程序的基础知识。 使用 Azure 文件存储 API 创建控制台应用程序并了解基本操作:
- 创建和删除 Azure 文件共享
- 创建和删除目录
- 枚举 Azure 文件共享中的文件和目录
- 上传、下载和删除文件
适用于
文件共享类型 | SMB | NFS |
---|---|---|
标准文件共享 (GPv2)、LRS/ZRS | ||
标准文件共享 (GPv2)、GRS/GZRS | ||
高级文件共享 (FileStorage)、LRS/ZRS |
创建 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>"; +
"EndpointSuffix=core.Chinacloudapi.cn";
访问 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)
{
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 方法将引发异常。 将对 delete 的调用置于 try/catch
块中并处理异常。
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 文件存储。 以下示例方法返回一个 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 文件操作是删除文件。
以下代码将删除指定文件。 首先,该示例基于 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 存储 API,请点击以下链接。
- 面向 Java 开发人员的 Azure
- Azure SDK for Java
- 适用于 Android 的 Azure SDK
- 适用于 Java SDK 的 Azure 文件共享客户端库参考
- Azure 存储空间服务 REST API
- Azure 存储团队博客
- 使用 AzCopy 命令行实用工具传输数据
- 对 Azure 文件进行故障排除
有关使用已弃用的 Java 版本 8 SDK 的相关代码示例,请参阅使用 Java 版本 8 的代码示例。