1 回答
TA貢獻(xiàn)2039條經(jīng)驗(yàn) 獲得超8個(gè)贊
正如@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");
我在我的環(huán)境中測試你的代碼,它也可以工作。但是,根據(jù)我的經(jīng)驗(yàn),您的問題FileNotFoundException encountered: C:\upload\bin" :(Access is denied)是由于缺少訪問C:或下的文件的權(quán)限引起的C:\upload\bin。因此,您需要在當(dāng)前的 Windows 環(huán)境中以管理員身份運(yùn)行您的代碼,如下圖所示。
圖 1. 如果使用 IntelliJ,請以管理員身份運(yùn)行您的代碼

圖 2. 如果使用 Eclipse,請以管理員身份運(yùn)行您的代碼

圖 3. 通過命令提示符以管理員身份運(yùn)行您的代碼

更新:在 Azure Blob 存儲上,文件和目錄結(jié)構(gòu)取決于 blob 名稱。因此,如果您想查看如下圖的文件結(jié)構(gòu),可以使用代碼String blobName = file.getAbsolutePath().replace(path, "");獲取 blob 名稱。
圖 4. 在我的本地機(jī)器上構(gòu)建的文件和目錄結(jié)構(gòu)

圖 5. 通過 Azure 存儲資源管理器在 Azure Blob 存儲上進(jìn)行上述操作

這是我的完整代碼。
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);
}
}
}
}
添加回答
舉報(bào)
