You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Scala获取GCS文件创建时间时Paths.get路径异常求助

解决GCS文件路径被Paths.get简化导致的创建时间获取问题

直接用Java NIO的Paths.get处理GCS路径时,会自动合并连续斜杠,把gs://变成gs:/,导致无法正确识别GCS资源。可以通过以下两种方式解决:

方式一:使用GCS官方Java客户端库

这是最可靠的方案,直接调用GCS API获取文件属性:

  1. 先添加依赖(以SBT为例):
libraryDependencies += "com.google.cloud" % "google-cloud-storage" % "2.22.0"
  1. 获取文件创建时间的代码:
import com.google.cloud.storage.StorageOptions
import java.time.Instant

// 初始化GCS客户端
val storage = StorageOptions.getDefaultInstance.getService
// 指定bucket和文件路径
val blob = storage.get("datalake-dev", "mu/tpu/file.0450138")
// 转换创建时间为可读格式
val creationTime = Instant.ofEpochMilli(blob.getCreateTime)
println(creationTime)

方式二:使用GCS NIO文件系统提供者

如果想继续用Java NIO的API,需要引入GCS专用的NIO实现,让Paths.get能正确解析GCS路径:

  1. 添加依赖:
libraryDependencies += "com.google.cloud" % "google-cloud-nio" % "0.126.22"
  1. 调整后的代码:
import java.nio.file.{Files, Paths}
import java.nio.file.attribute.BasicFileAttributes

// GCS NIO提供者会自动处理gs://格式的路径,不会合并斜杠
val path = Paths.get("gs://datalake-dev/mu/tpu/file.0450138")
val attrs = Files.readAttributes(path, classOf[BasicFileAttributes])
println(attrs.creationTime())

为什么原代码失效

Java NIO默认的路径处理逻辑是为本地文件系统设计的,会自动规范化路径(合并连续斜杠、处理./../等),但GCS的URI格式要求保留//来区分bucket名称和对象路径,所以必须借助GCS专用的库来处理这类路径。

内容的提问来源于stack exchange,提问作者Nouha Thabet

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.23 03:15:46