比方說,我有一個結構如何在處理項目文件夾內容時使用文件路徑?
-bin/com/abc/A.class
-src/com/abc/A.java
-config/info.txt
如何解決從A類info.txt文件? 我們應該使用「user.dir」屬性還是「config/info.txt」,以便它能夠工作? 我將這個編譯到罐子裏,然後 該jar將用於servlet, ,但我不認爲這很重要 導致這個文件被寫入並從 只從內部jar的方法讀取。
比方說,我有一個結構如何在處理項目文件夾內容時使用文件路徑?
-bin/com/abc/A.class
-src/com/abc/A.java
-config/info.txt
如何解決從A類info.txt文件? 我們應該使用「user.dir」屬性還是「config/info.txt」,以便它能夠工作? 我將這個編譯到罐子裏,然後 該jar將用於servlet, ,但我不認爲這很重要 導致這個文件被寫入並從 只從內部jar的方法讀取。
只要將它放在運行時類路徑中並使用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。
@BalusC我可能不是很清楚整個事情。你建議的是偉大的事情,但我需要一個更簡單的解決方案。該文件將保存在jar文件中,並且我不需要[現在,稍後我可能需要,非常感謝] - 我不需要在外部項目中提取文件。我只需要讀一個項目自己的文件夾和它的內容,即一個文件。你打算說什麼? 「user.dir」或「./」? – EugeneP 2010-02-12 13:06:34
它不能做得更簡單。然後,您將完全依賴底層平臺以及程序執行方式。 JAR文件本身已經在運行時類路徑中。您也可以將文件相對於它並使用上述建議的方式。這並不難。然而,我可以想象,初學者無法理解「階級路徑」現象以及如何從中受益。祝你好運。 – BalusC 2010-02-12 13:15:22
或者,如果你的**實際**問題是:「我如何得到一個有價值的File對象? (然後請問這樣),你可以通過'new File(URI)'得到它,其中URI由'ClassLoader#getResource()'獲得,然後'URL#toURI()'獲得。 – BalusC 2010-02-12 13:19:41
@BalusC我會稍後再做,但肯定。 @Romain Muller。他們不會被移除,因此他們在類路徑 – EugeneP 2010-02-12 13:02:48