2011-05-11 173 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来” );