Java:访问ANY模块外部的相对路径

时间:2016-05-12 13:25:51

标签: java java-io

我有一个包含几个模块的java项目:

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

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

InputStream is = new FileInputStream(<RelativePathToEnvFile>);

问题是相对路径似乎只适用于模块下的子目录。使用所提到的here

的getResource()技巧来源root或类路径内的任何地方

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

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

这在Java中不可能吗?

1 个答案:

答案 0 :(得分:4)

从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文件放在你的一个模块的resources文件夹中(或者有一个单独的配置模块),然后在类路径中解析该文件。