【问题标题】:Java: Access relative path outside ANY moduleJava:访问任何模块外的相对路径
【发布时间】:2016-05-12 13:25:50
【问题描述】:

我有一个由几个模块组成的 java 项目:

myWebApp
  - conf     //not a java module, just text files
  - ModuleA
      -- src
      -- target
      -- moduleA.iml
      -- pom.xml
  - ModuleB
     ...
  - pom.xml
  - myWebApp.iml
  - myWebApp.env

我想从一个类(显然在模块的 src 文件夹下)访问myWebApp.env 文件(这是一个 java 属性文件),例如:

InputStream is = new FileInputStream(<RelativePathToEnvFile>);

问题是相对路径似乎只适用于模块源根目录下的子目录,或使用提到的 getResource() 技巧的类路径内的任何地方here

在我知道的所有其他语言上,我都可以做类似的事情:

InputStream is = new FileInputStream("../../../../../myWebApp.env");

这在java中不可能吗?

【问题讨论】:

  • 看看here。似乎您的相对路径不是“基于” user.dir
  • @fhofmann 你是对的。实际上我忘记了我已经将 IDE 配置为与码头一起工作,因此配置文件甚至没有部署,因此它显然无法访问。谢谢

标签: java java-io


【解决方案1】:

从 Java 7 开始,您可以使用 NIO Files API 执行此操作(旧的 File API 也可以,但使用 NIO 可以更好地完成相对路径解析)

File file = Paths.get("../../pom.xml").toFile();

为确保文件正确,您可以调用toRealPath() 来解析相对路径段

File file = Paths.get("../../pom.xml").toRealPath().toFile();

如果你有一个工作目录,你可以从中解析一个相对路径:

File file = Paths.get(".") //the current working dir
                 .resolve("../pom.xml") //navigate to a relative path
                 .toFile(); //convert to old File api

使用 IDE 时,您必须确保工作目录正确。工作目录不一定与执行的类所属的模块目录相同。工作目录可能是项目/父模块的目录。

此外,您的代码可能仅适用于该特定设置。至少你应该考虑将 env 文件放在你的模块之一的资源文件夹中(或有一个单独的配置模块),然后在类路径中解析文件。

【讨论】:

    猜你喜欢
    • 2019-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-07
    • 2017-08-10
    • 2012-03-07
    相关资源
    最近更新 更多