2011-05-11 219 views
4

我使用屬性文件:相對路徑文件

try 
{ 
    properties.load(new FileInputStream("filename.properties")); 
} 
catch (IOException e) 
{ 
} 

我應該在哪裏放置filename.properties?我不想指定絕對路徑,因爲此代碼必須在不同的平臺上工作。我試圖將它放在與de class相同的目錄中,但它不起作用。 (對不起,如果這是一個愚蠢的問題)

也許我可以得到當前類被放置在哪裏的路徑?

回答

4

確保您的財產文件提供給您的編譯(的.class)文件,並把它這樣

getClass().getResource("filename.properties") // you get an URL, then openStream it 

getClass().getResourceAsStream("filename.properties") // you get an InputStream 

例子:

import java.net.URL; 
public class SampleLoad { 
    public static void main(String[] args) { 
     final URL resource = SampleLoad.class.getResource("SampleLoad.class"); 
     System.out.println(resource); 
    } 
} 

這main在運行時檢索自己的編譯版本:

文件:/ C:/ _項目/工具箱/目標/班/組織/遊戲/工具箱/ SampleLoad.class

+0

好吧,它的工作原理,但我必須從該路徑中刪除'file:/',所以我必須用我的代碼中的'新FileInputStream(filename.properties)「替換爲:FileInputStream(resource.toString()。substring (「file:/」。length(),resource.toString()。length())));' ' – de3 2011-05-11 15:28:26

+1

@ de3,使用@ Guillaume的第二種形式'getResourceAsStream(*)'。即使你用罐子裝運你的課程,它也會繼續工作。 – 2011-05-11 19:27:20

0

你可以使用: 字符串USERDIR = System.getProperty( 「user.dir來」 );