2016-05-12 18 views
1

我有一個由幾個模塊Java項目的外部訪問的相對路徑:從類的Java:任何模塊

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

我要訪問myWebApp.env文件(這是一個Java屬性文件)(這顯然是下一個模塊的src文件夾),如:

InputStream is = new FileInputStream(<RelativePathToEnvFile>); 

的問題是,相對路徑似乎只子目錄下模塊的源根使用的getResource(類路徑內工作,或者任意位置)特技如上所述here

在我知道我可以做一些像其他語言:

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

這是不是可能在java中?

+1

看看[這裏](http://stackoverflow.com/questions/1131500/using-relative-directory-path-in-java)。似乎你的相對路徑不是基於user.dir – fhofmann

+0

@fhofmann你是對的。其實我忘了我已經配置了IDE與jetty一起工作,因此配置文件甚至沒有部署,因此顯然無法訪問。謝謝 – chefarov

回答

3

由於Java 7,您可以用NIO文件API做到這一點(舊文件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文件放在其中一個模塊的資源文件夾中(或者有一個單獨的配置模塊),然後在類路徑中解析文件。