1 回答
TA贡献2039条经验 获得超7个赞
正如@ZhaoxingLu-Microsoft 所说,file生成的对象source.listFiles()足以通过 获取绝对文件路径file.getAbsolutePath(),因此您可以编写如下代码。
if (blob.exists() == false) {
blob.uploadFromFile(file.getAbsolutePath());
} else System.out.println("File " + file.getAbsolutePath() + " Already exist in storage");
我在我的环境中测试你的代码,它也可以工作。但是,根据我的经验,您的问题FileNotFoundException encountered: C:\upload\bin" :(Access is denied)是由于缺少访问C:或下的文件的权限引起的C:\upload\bin。因此,您需要在当前的 Windows 环境中以管理员身份运行您的代码,如下图所示。
图 1. 如果使用 IntelliJ,请以管理员身份运行您的代码
图 2. 如果使用 Eclipse,请以管理员身份运行您的代码
图 3. 通过命令提示符以管理员身份运行您的代码
更新:在 Azure Blob 存储上,文件和目录结构取决于 blob 名称。因此,如果您想查看如下图的文件结构,可以使用代码String blobName = file.getAbsolutePath().replace(path, "");
获取 blob 名称。
图 4. 在我的本地机器上构建的文件和目录结构
图 5. 通过 Azure 存储资源管理器在 Azure Blob 存储上进行上述操作
这是我的完整代码。
private static final String path = "D:\\upload\\";
private static final String storageConnectionString = "<your storage connection string>";
private static final String containerName = "<your container for uploading>";
private static CloudBlobClient serviceClient;
public static void upload(File file) throws InvalidKeyException, URISyntaxException, StorageException, IOException {
// Container name must be lower case.
CloudBlobContainer container = serviceClient.getContainerReference(containerName);
container.createIfNotExists();
String blobName = file.getAbsolutePath().replace(path, "");
CloudBlockBlob blob = container.getBlockBlobReference(blobName);
if (blob.exists() == false) {
blob.uploadFromFile(file.getAbsolutePath());
} else {
System.out.println("File " + file.getAbsolutePath() + " Already exist in storage");
}
}
public static void main(String[] args)
throws URISyntaxException, StorageException, InvalidKeyException, IOException {
CloudStorageAccount account = CloudStorageAccount.parse(storageConnectionString);
serviceClient = account.createCloudBlobClient();
File source = new File(path);
for (File fileOrDir : source.listFiles()) {
boolean isFile = fileOrDir.isFile();
if(isFile) {
upload(fileOrDir);
} else {
for(File file: fileOrDir.listFiles()) {
upload(file);
}
}
}
}
添加回答
举报