首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >从Java删除“文件夹”或Google Cloud Bucket中所有带前缀的文件

从Java删除“文件夹”或Google Cloud Bucket中所有带前缀的文件
EN

Stack Overflow用户
提问于 2014-10-14 06:29:10
回答 2查看 9.3K关注 0票数 13

我知道‘文件夹’的想法在谷歌云存储中是不存在的或不同的,但我需要一种方法来删除‘文件夹’中的所有对象或Java中给定的前缀。

GcsService有一个删除功能,但据我所知,它只接受一个GscFilename对象,并且不支持通配符(即"folderName/**“不起作用)。

有什么建议吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-10-14 06:51:55

该接口一次仅支持删除单个对象。您只能使用多个HTTP请求或批处理多个delete请求来请求多次删除。不存在使用通配符等删除多个对象的API调用。为了删除具有某个前缀的所有对象,您需要列出这些对象,然后对与该模式匹配的每个对象进行delete调用。

当您要求命令行实用程序gsutil删除路径"gs://bucket/dir/**“时,它就会执行此操作。它会获取与该模式匹配的对象列表,然后对每个对象进行删除调用。

如果需要快速解决方案,可以随时使用Java程序exec gsutil。

下面是与上面的答案对应的代码,以防其他人想要使用它:

代码语言:javascript
复制
public void deleteFolder(String bucket, String folderName) throws CoultNotDeleteFile {
  try
  {
    ListResult list = gcsService.list(bucket, new ListOptions.Builder().setPrefix(folderName).setRecursive(true).build());

    while(list.hasNext())
    {
      ListItem item = list.next();
      gcsService.delete(new GcsFilename(file.getBucket(), item.getName()));
    }
  }
  catch (IOException e)
  {
    //Error handling
  }
}
票数 11
EN

Stack Overflow用户

发布于 2017-12-30 09:12:33

我意识到这是一个老问题,但我只是偶然发现了同样的问题,并找到了不同的方法来解决它。

Google Cloud Java Client for Storage中的Storage类包括一个列出存储桶中的blobs的方法,该方法还可以接受一个选项来设置前缀,以便将结果过滤到名称以前缀开头的blobs。

例如,从存储桶中删除所有具有给定前缀的文件,可以这样实现:

代码语言:javascript
复制
Storage storage = StorageOptions.getDefaultInstance().getService();
Iterable<Blob> blobs = storage.list("bucket_name", Storage.BlobListOption.prefix("prefix")).iterateAll();
for (Blob blob : blobs) {
    blob.delete(Blob.BlobSourceOption.generationMatch());
}
票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26349901

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档