2016-01-25 232 views
1

我正在從位於target/[projectname]/WEB-INF/classes/的(maven)生成的文件中讀取信息。 Eclipse沒有向我顯示路徑,但是,我無法在WEB-INF中創建名爲classes的新文件夾(因爲已有一個文件夾)。系統找不到指定的路徑

我可以通過命令行找到該文件夾​​和文件,但是,我無法爲該文件創建一個FileInputStream

但是,我可以訪問位於target的其他文件,例如,在每次構建期間已生成的target/maven-archiver/pom.properties。唯一的區別是我可以在Eclipse中看到該文件。

該項目是GWT之一,並用maven構建。我沒有看到Java無法找到路徑的任何原因。

我正在訪問的文件是version.properties。我可以看到它在瀏覽器(項目名稱被塗黑):

File Location

我試着通過

private static final String PATH = "target/[projectname]/WEB_INF/classes/version.properties"; 

public static String getVersion() { 
    String version; 
    Properties prop = new Properties(); 
    File resource = new File(PATH); 
    try { 
     prop.load(new FileInputStream(resource)); 
     version = prop.getProperty("build.time"); 
    } catch (IOException e) { 
     e.printStackTrace(); 
     version = "01.01.2016 00:00"; 
    } 
    return version; 
} 

的例外,我去打開該文件是

java.io.FileNotFoundException: target\[projectname]\WEB_INF\classes\version.properties (Das System kann den angegebenen Pfad nicht finden) 
at java.io.FileInputStream.open(Native Method) 
at java.io.FileInputStream.<init>(FileInputStream.java:138) 
at [projectname].utils.VersionUtils.getBuildTime(VersionUtils.java:31) 
[...] 
+0

爲什麼你需要從你的代碼訪問目標目錄? – Ferrybig

+0

@Ferrybig由於該文件是自動生成的,因此只能在此處生成的輸出中使用(包含使用'$ {propertyName}'指定的maven屬性)。 – LordAnomander

+0

@LordAnomander你可能會更成功地使用getClass()。getResource(「\ version.properties」),因爲你的代碼似乎被編譯成某種容器,但我不確定格式 – Ferrybig

回答

1

你這樣做完全錯了。

version.properties是您的應用程序的資源位於src/main/resources內。當你有最終的WAR時,這個文件將在你的應用程序的類路徑中。這是因爲Maven會將這個資源放在WAR的文件夾WEB-INF/classes內。您不訪問路徑爲target/...src/main/...的文件。這是Eclipse/Maven的考慮。一旦你有最後的戰爭,target甚至不存在了。

其次,您不能作爲File對象訪問資源。您必須改爲獲取資源的InputStream

結合了這一切,你應該有:

prop.load(VersionUtils.class.getResourceAsStream("/version.properties"));‌​ 

getResourceAsStream的路徑是,要麼是相對於當前類的位置,或絕對到classpath的路徑。在這種情況下,資源位於類路徑的根目錄,因此我們只使用"/version.properties"

相關問題