Как сказал @ 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. Запустите свой код от имени администратора с помощью командыПодсказка
Обновление : в хранилище BLOB-объектов Azure структура файлов и каталогов зависит от имени BLOB-объекта.Поэтому, если вы хотите увидеть структуру файла, как показано на рисунке ниже, вы можете использовать код String blobName = file.getAbsolutePath().replace(path, "");
, чтобы получить имя BLOB-объекта.
Рис. 4. Структура файлов и каталогов, созданная на моем локальном компьютере
Рис. 5. То же самое выше для хранилища BLOB-объектов Azure через обозреватель хранилища Azure
Вот мой полный код.
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);
}
}
}
}