Java Google云存储上目录中的列表blob返回错误结果

Java Google云存储上目录中的列表blob返回错误结果,java,google-cloud-storage,Java,Google Cloud Storage,我想列出Google云存储目录中的所有blob,如下所示: public List<Blob> getFiles(String bucketName, String path) { final Storage storage = storageSupplier.get(); final Page<Blob> blobs = storage.list( bucketName, BlobL

我想列出Google云存储目录中的所有blob,如下所示:

  public List<Blob> getFiles(String bucketName, String path) {

    final Storage storage = storageSupplier.get();

    final Page<Blob> blobs =
        storage.list(
            bucketName,
            BlobListOption.currentDirectory(),
            BlobListOption.prefix((path.endsWith("/") ? path : (path + "/"))));
    final Iterator<Blob> blobIterator = blobs.iterateAll().iterator();
    final List<Blob> files = new ArrayList<>();
    while (blobIterator.hasNext()) {
      Blob blob = blobIterator.next();
      System.out.println(blob.getName() + ", isDirectory: " + blob.isDirectory());
      if (!blob.isDirectory()) {
        files.add(blob);
      }
    }
    return files;
  }
我发现有两个问题:

输入
目录在列表中。我可以理解这一点,因为它还包含
列表(…)
方法调用中设置的
前缀

但是我的问题是:
isDirectory()
为什么对
input
blob返回false,因为它显然是一个目录

isDirectory()
方法的文档:

如果当前blob表示目录,则返回true。只有在使用Storage.bloblistotion.currentDirectory()选项时,Storage.list(字符串,Storage.bloblistotion)返回blob时,才会发生这种情况。[……]

我的Google云存储客户端版本:
com.google.cloud:google云存储:1.113.9

我已经

TL;DR:在没有目录的平台上查找目录是一个很大的错误

在我看来,这是Java客户机库开发人员犯的错误


所以,不要依赖目录指示器。了解底层平台并明智地使用它。

我已经知道了

TL;DR:在没有目录的平台上查找目录是一个很大的错误

在我看来,这是Java客户机库开发人员犯的错误


所以,不要依赖目录指示器。理解底层平台并明智地使用它。

“理解底层平台并明智地使用它。”-我不同意。GCStorage中有一个按钮“create dir”,同一个UI以基于目录的结构组织blob,Java(和其他客户机)有“isDirectory”方法等。它是否包含在“了解平台”中?所以Google everywhere将它表示为“目录”,但不知何故,它是一个需要理解它的用户/开发人员?用户希望有与文件系统类似的体验,但它不是文件系统。谷歌这样“撒谎”是错误的!尝试在linux和GCS上移动100万个文件,这是不一样的。它看起来像一个文件系统,但它不是,它是一个blob存储。如果你有一个引擎,四个轮子和一个方向盘,如果是拖拉机,你就不会在高速公路上行驶!但它看起来像一辆汽车。“理解底层平台并明智地使用它。”-我不同意。GCStorage中有一个按钮“create dir”,同一个UI以基于目录的结构组织blob,Java(和其他客户机)有“isDirectory”方法等。它是否包含在“了解平台”中?所以Google everywhere将它表示为“目录”,但不知何故,它是一个需要理解它的用户/开发人员?用户希望有与文件系统类似的体验,但它不是文件系统。谷歌这样“撒谎”是错误的!尝试在linux和GCS上移动100万个文件,这是不一样的。它看起来像一个文件系统,但它不是,它是一个blob存储。如果你有一个引擎,四个轮子和一个方向盘,如果是拖拉机,你就不会在高速公路上行驶!但它看起来像一辆汽车。
input/, isDirectory: false
input/1.json, isDirectory: false
input/2.json, isDirectory: false
input/3.json, isDirectory: false