java 如何在 azure 中的父目录下添加子目录?
How to add sub directory under parent directory in azure in java ?
我正在通过 java 服务在 Azure 存储帐户中创建目录。
jSON 输入是:
{ "accountName" : "name",
"accountkey" : "keyOfAzureAccount",
"directoryStructure" : "directory1/directory2/directory3/directory4/directory5"
}
我期望的是在 Azure 帐户中一对一地创建这些目录。就像 directory5 将在 directory4 内。 directory4 将在 directory3 中。 directory3 将在 directory2 内,directory2 将在 directory1 内。
我的 java 代码如下:
@Override
public JSONObject createDynamicDirectory(JSONObject jsonInput) throws InvalidKeyException, URISyntaxException {
CloudFileClient fileClient = null;
String storageConnectionString = "DefaultEndpointsProtocol=https;AccountName="+jsonInput.get("accountName")+";"+"AccountKey="+jsonInput.get("accountkey");
System.out.println(storageConnectionString);
CloudStorageAccount storageAccount = CloudStorageAccount.parse(storageConnectionString);
JSONObject jsonOutput = new JSONObject();
try {
fileClient = storageAccount.createCloudFileClient();
String directoryName = jsonInput.get("directoryStructure").toString();
String[] directoryNameArray = directoryName.split("\s*/\s*");
System.out.println(directoryNameArray.length);
CloudFileShare share = fileClient
.getShareReference(directoryNameArray[0].toLowerCase().replaceAll("[-+.^:,!@#$%&*()_~`]", ""));
if (share.createIfNotExists()) {
System.out.println("New share created named as "
+ directoryName.toLowerCase().replaceAll("[-+.^:,!@#$%&*()_~`]", ""));
}
for(int i=0;i<directoryNameArray.length;i++)
{
CloudFileDirectory rootDir = share.getRootDirectoryReference();
CloudFileDirectory parentDirectory = rootDir.getDirectoryReference(directoryNameArray[i]);
if (parentDirectory.createIfNotExists()) {
System.out.println("new directory created named as " + directoryName);
jsonOutput.put("status", "successful");
}
}
} catch (Exception e) {
System.out.println("Exception is " + e);
jsonOutput.put("status", "unsuccessful");
jsonOutput.put("exception", e.toString());
}
return jsonOutput;
}
}
此代码根据需要从 directory1 创建共享。但问题是,在同一个共享下,它创建了所有目录 1、2、3、4、5。不像要求的一对一目录。
如何实现我的 java 代码以便可以根据需要创建目录?
尝试这样的事情(代码在 C# 中)
var parentDirectory = share.GetRootDirectoryReference();
for (var i=1; i< directoryNameArray.Length; i++)
{
var directoryToCreate = directoryNameArray[i];
var directory = parentDirectory.GetDirectoryReference(directoryToCreate);
directory.CreateIfNotExists();
Console.WriteLine("Created directory - " + directoryToCreate);
parentDirectory = directory;
}
基本上,您从共享作为根目录开始,并且当您开始创建子目录时,您会不断更新根目录的引用。
我正在通过 java 服务在 Azure 存储帐户中创建目录。
jSON 输入是:
{ "accountName" : "name",
"accountkey" : "keyOfAzureAccount",
"directoryStructure" : "directory1/directory2/directory3/directory4/directory5"
}
我期望的是在 Azure 帐户中一对一地创建这些目录。就像 directory5 将在 directory4 内。 directory4 将在 directory3 中。 directory3 将在 directory2 内,directory2 将在 directory1 内。
我的 java 代码如下:
@Override
public JSONObject createDynamicDirectory(JSONObject jsonInput) throws InvalidKeyException, URISyntaxException {
CloudFileClient fileClient = null;
String storageConnectionString = "DefaultEndpointsProtocol=https;AccountName="+jsonInput.get("accountName")+";"+"AccountKey="+jsonInput.get("accountkey");
System.out.println(storageConnectionString);
CloudStorageAccount storageAccount = CloudStorageAccount.parse(storageConnectionString);
JSONObject jsonOutput = new JSONObject();
try {
fileClient = storageAccount.createCloudFileClient();
String directoryName = jsonInput.get("directoryStructure").toString();
String[] directoryNameArray = directoryName.split("\s*/\s*");
System.out.println(directoryNameArray.length);
CloudFileShare share = fileClient
.getShareReference(directoryNameArray[0].toLowerCase().replaceAll("[-+.^:,!@#$%&*()_~`]", ""));
if (share.createIfNotExists()) {
System.out.println("New share created named as "
+ directoryName.toLowerCase().replaceAll("[-+.^:,!@#$%&*()_~`]", ""));
}
for(int i=0;i<directoryNameArray.length;i++)
{
CloudFileDirectory rootDir = share.getRootDirectoryReference();
CloudFileDirectory parentDirectory = rootDir.getDirectoryReference(directoryNameArray[i]);
if (parentDirectory.createIfNotExists()) {
System.out.println("new directory created named as " + directoryName);
jsonOutput.put("status", "successful");
}
}
} catch (Exception e) {
System.out.println("Exception is " + e);
jsonOutput.put("status", "unsuccessful");
jsonOutput.put("exception", e.toString());
}
return jsonOutput;
}
}
此代码根据需要从 directory1 创建共享。但问题是,在同一个共享下,它创建了所有目录 1、2、3、4、5。不像要求的一对一目录。
如何实现我的 java 代码以便可以根据需要创建目录?
尝试这样的事情(代码在 C# 中)
var parentDirectory = share.GetRootDirectoryReference();
for (var i=1; i< directoryNameArray.Length; i++)
{
var directoryToCreate = directoryNameArray[i];
var directory = parentDirectory.GetDirectoryReference(directoryToCreate);
directory.CreateIfNotExists();
Console.WriteLine("Created directory - " + directoryToCreate);
parentDirectory = directory;
}
基本上,您从共享作为根目录开始,并且当您开始创建子目录时,您会不断更新根目录的引用。