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

Scala如何不引用资源目录内文件直接获取其绝对路径

异常原因

你遇到的java.nio.file.InvalidPathException: Illegal char <:> at index 2是Windows平台特有的路径解析问题:Class.getResource()返回的URL路径格式为/C:/项目路径/target/classes/,前置斜杠会导致Paths.get解析时把索引2位置的冒号判定为非法字符。同时直接调用getPath()还会存在路径空格被编码为%20、特殊字符未转义的问题,进一步导致解析失败。

解决方案

以下实现不需要依赖资源目录下的任何文件,可直接获取类路径根(对应开发环境下src/main/resources的编译输出目录)的绝对路径:

import java.nio.file.Path
import java.nio.file.Paths

def getResourceDirAbsolutePath: Path = {
  // 转成URI可以自动处理路径格式、编码转义问题,从根源避免解析报错
  val classpathRootUri = getClass.getClassLoader.getResource("").toURI
  Paths.get(classpathRootUri)
}

注意事项

  • 该方法仅适用于开发环境、classpath对应本地文件系统目录的场景
  • 项目打包为JAR包运行时,不存在文件系统层面的实体资源目录,此时getResource("")会返回null,你可以直接通过getClass.getResourceAsStream("/资源文件名")读取资源内容,无需获取目录路径

内容的提问来源于stack exchange,提问作者Vasanth Subramanian

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 13:27:00