[英]Error occured while list the files from azure blob container
我正在使用以下代码片段从 Azure Blob 容器中获取文件列表:
public static String[] listFolder( String containerURI, String sasToken, String dirPrefix) throws StorageException, URISyntaxException{
ArrayList<String> files = new ArrayList<String>();
// Get a reference to a container
CloudBlobContainer container = (new CloudBlockBlob(new URI(containerURI + "?" + sasToken))).getContainer();
CloudBlobDirectory directory = container.getDirectoryReference(dirPrefix);
if (directory.listBlobs() != null) {
for (ListBlobItem item : directory.listBlobs()) {
CloudBlockBlob blob = (CloudBlockBlob)item;
files.add(blob.getName());
}
}
return files.toArray(new String[files.size()]);
}
但我遇到了一个例外
执行[invoke]时遇到[java.util.NoSuchElementException]:[枚举结果时出错,详情查看原始异常。 在
com.microsoft.azure.storage.core.LazySegmentedIterator.hasNext(LazySegmentedIterator.Z93F725A07423FE1C889F448B33D21F4Z])
有没有人指出代码有什么问题,或者是否需要任何修改?
以下是我使用的方法,
private static List<String> listBlobs(CloudBlobContainer container) {
List<ListBlobItem> blobs = new ArrayList<>();
Iterable<ListBlobItem> items = container.listBlobs();
for(ListBlobItem item : items) {
if (! (item instanceof CloudBlobDirectory)) {
blobs.add(item);
}
}
return Lists.transform(blobs, new Function<ListBlobItem, String>() {
@Override
public String apply(ListBlobItem input) {
String[] segs = input.getUri().getPath().split("/");
return "<a href='" + input.getUri().toString() + "'>" + segs[segs.length - 1] + "</a>";
}
});
}
private static List<String> listBlobs(CloudBlobDirectory directory) throws Exception {
List<ListBlobItem> blobs = new ArrayList<>();
Iterable<ListBlobItem> items = directory.listBlobs();
for(ListBlobItem item : items) {
if (! (item instanceof CloudBlobDirectory)) {
blobs.add(item);
}
}
List<String> strings = Lists.transform(blobs, new Function<ListBlobItem, String>() {
@Override
public String apply(ListBlobItem input) {
String[] segs = input.getUri().getPath().split("/");
return "<a href='" + input.getUri().toString() + "'>" + segs[segs.length - 1] + "</a>";
}
});
for(CloudBlobDirectory dir : listDirectories(directory)) {
strings.addAll(listBlobs(dir));
}
return strings;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.