2010-02-12 60 views
2

比方說,我有一個結構如何在處理項目文件夾內容時使用文件路徑?

-bin/com/abc/A.class 
-src/com/abc/A.java 
-config/info.txt 

如何解決從A類info.txt文件? 我們應該使用「user.dir」屬性還是「config/info.txt」,以便它能夠工作? 我將這個編譯到罐子裏,然後 該jar將用於servlet, ,但我不認爲這很重要 導致這個文件被寫入並從 只從內部jar的方法讀取。

+0

@BalusC我會稍後再做,但肯定。 @Romain Muller。他們不會被移除,因此他們在類路徑 – EugeneP 2010-02-12 13:02:48

回答

1

只要將它放在運行時類路徑中並使用ClassLoader#getResourceAsStream()即可獲得它的InputStream。將它放在類中的JAR文件中,或者將JAR文件的Class-Path條目(JAR相對)路徑添加到文件中是綽綽有餘的。

ClassLoader classLoader = Thread.currentThread().getContextClassLoader(); 
InputStream input = classLoader.getResourceAsStream("config/info.txt"); 
// Do your thing to read it. 

或者,如果你真的想要得到它在java.io.File的味道,然後利用ClassLoader#getResource()URL#toURI()File constructor taking an URI

ClassLoader classLoader = Thread.currentThread().getContextClassLoader(); 
URL url = classLoader.getResource("config/info.txt"); 
File file = new File(url.toURI()); 
// Do your thing with it. 

不要在java.io東西使用相對路徑。這將取決於您無法以任何方式控制的當前工作目錄。這僅僅是便攜性麻煩的收據。只需使用類路徑即可。

這就是說,你是否知道java.util.Properties API?它看起來像你試圖達到同樣的事情,即more easy to be done with propertiesfiles

+0

@BalusC我可能不是很清楚整個事情。你建議的是偉大的事情,但我需要一個更簡單的解決方案。該文件將保存在jar文件中,並且我不需要[現在,稍後我可能需要,非常感謝] - 我不需要在外部項目中提取文件。我只需要讀一個項目自己的文件夾和它的內容,即一個文件。你打算說什麼? 「user.dir」或「./」? – EugeneP 2010-02-12 13:06:34

+0

它不能做得更簡單。然後,您將完全依賴底層平臺以及程序執行方式。 JAR文件本身已經在運行時類路徑中。您也可以將文件相對於它並使用上述建議的方式。這並不難。然而,我可以想象,初學者無法理解「階級路徑」現象以及如何從中受益。祝你好運。 – BalusC 2010-02-12 13:15:22

+0

或者,如果你的**實際**問題是:「我如何得到一個有價值的File對象? (然後請問這樣),你可以通過'new File(URI)'得到它,其中URI由'ClassLoader#getResource()'獲得,然後'URL#toURI()'獲得。 – BalusC 2010-02-12 13:19:41

相關問題