Java从项目基目录读取文件夹

pat*_*fox 3 java relative-path maven

我有一个具有典型项目结构的 Maven 项目。在项目的基础上,我有一个名为res 的目录,其中包含一些资源(> 500 MB)。我正在尝试使用

this.class().getClassLoader().getResourceAsStream("res/xxx")

此代码片段从该文件夹中读取,但它返回空资源流。我在下面有一些解决方法,但由于下面解释的原因,这些方法都不可接受。

  1. 我可以将文件夹移动到 {base}/target/classes,它将被读取,但当我执行 mvn clean时它也会被清理。因此,这种方法行不通。由于某种原因,将路径指定为../../res/xxx也不起作用。
  2. 我可以将该文件夹移动到 {base}/src/resources,但随后它将被复制到 target/classes 和 jar。因此,这也是不可接受的。
  3. 虽然我愿意尝试其他一些 java API,但我可能必须使用类加载器机制,因为有一些外部库组件也尝试使用类似的方法访问 res文件夹。

有什么方法可以从项目基目录读取res文件夹吗?pom.xml文件中是否有一些设置可以帮助我解决这个问题?

Dav*_*ard 5

使用this.class().getClassLoader().getResourceAsStream("/res/xxx")后,您将从类路径的根目录读取内容,无论 Windows 或 Linux 中的实际文件/文件夹位置如何。这实际上是读取文件的最安全的方法之一,特别是当您不知道应用程序最终将如何部署时。

这意味着您的类路径必须包含 res 的父级,并且在部署应用程序时必须复制 res/

否则,如果您想使用相对路径,请尝试此片段(取自此 SO答案):

String filePath = new File("").getAbsolutePath();
filePath.concat("path to the property file");
Run Code Online (Sandbox Code Playgroud)