假设我有这样的 blob 结构:
dir0
├── dir1
│ ├── file11
│ └── file12
├── dir2
└── dir3
列出 dir1
后包含两个文件file11
, file12
与 listBlobsByHierarchy("dir0/dir1/")
方法我得到两个 Blob blobName
属性设置为dir0/dir1/file11
和dir0/dir1/file12
,所以<virtual_path>
/<file_name>
。没关系,但在某些时候我需要获取 <file_name>
部分。
我的问题是:Azure Storage SDK 12 for Java 是否提供了获取 <file_name>
的机制? blob 名称的一部分? 我可以自己做,但很难相信 SDK 不提供此功能...也许你们知道不同的优雅方法?您通常如何处理此类事情?
对我来说有点奇怪的是 SDK 似乎不支持构建前缀或从 blob 名称获取文件名:P 我期望像 fileName
这样的东西领域 BlobItem
类或buildPrefix(List<String> segments)
用“/”连接路径段的方法。
最佳答案
你只需这样做:
blobName.replaceFirst("^/dir0/dir1/", "")
blob 存储中的目录不是真实的,结构是扁平的,并且只有一些考虑前缀的辅助方法。请参阅this explanation了解更多详情。
您始终可以启用hierarchical namespace (又名 Datalake Storage)在您的 blob 帐户中。这使得 blob 容器更像具有真实目录的传统文件系统。您正在使用不同的 SDK (-> docs )。以及它的DirectoryEntry对象区分 name
(不带路径)和 fullName
(带路径)。
关于java - Azure Blob 存储 Java SDK 12 从 Blob 名称中提取文件名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71006583/