【问题标题】:How do you check if a folder exists in Google Cloud Storage using Java?如何使用 Java 检查 Google Cloud Storage 中是否存在文件夹?
【发布时间】:2020-07-20 04:32:02
【问题描述】:

我在尝试确定 Google Cloud Storage 中是否存在“目录/文件夹”时遇到问题。

我知道技术上没有“目录”或“文件夹”的概念,但我需要检查是否存在特定前缀。

这是我检测是否存在正常工作的 Blob 的方式:

public boolean doesFileExist(String bucket, String prefix) {
    Blob blob = storage.get(bucket, prefix);
    return blob != null;
}

当使用带有扩展名的实际文件名时,这似乎有效。但是,将其用于 folder/ 之类的东西是行不通的。

有什么建议吗?

【问题讨论】:

  • 云存储中不存在文件夹。可以创建一个名为“文件夹/”的对象,这是一些软件工具用来模拟文件夹的方法。 Cloud Storage 是一个平面命名空间。文件folderA/file1folderB/file1 存在于同一级别。如果对象folderA/file1 存在,则前缀将包含folderA,但这不是文件系统约定中的真实文件夹。 / 字符是 Cloud Storage 命名空间中的可用字符,仅对您的软件具有特殊意义。
  • Iterable<Blob> blobs = storage.list("gcpBucket", Storage.BlobListOption.prefix("gcpFolderPath")).iterateAll(); 如果您得到任何 blob,则该文件夹存在,否则不存在。

标签: java google-cloud-platform google-cloud-storage


【解决方案1】:

您可以使用Cloud Storage List API 查询具有共享前缀的所有文件。如果您完全找到任何文件,则表示它存在。您将需要使用list() 方法并传递一组指定前缀的BlobListOption,并且可能只是为了提高效率而将页面大小设置为1。

【讨论】:

    【解决方案2】:

    感谢@DougStevenson 的建议!我能够让它与这个一起工作:

    public boolean doesFileExist(String bucket, String prefix) {
        Page<Blob> blobs = storage.list(bucket, BlobListOption.prefix(prefix), BlobListOption.pageSize(1));
        return blobs.getValues().iterator().hasNext();
    }
    

    【讨论】:

    • 记住该文件夹不存在!!它只是一个文件路径元数据。如果路径的一部分(在“文件夹”中)有文件,则“文件夹”存在。
    猜你喜欢
    • 2012-11-11
    • 2022-11-05
    • 1970-01-01
    • 1970-01-01
    • 2019-01-12
    • 2018-02-15
    • 2020-01-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多