2012-05-11 64 views
1

我正在构建一个Java程序,该程序将自动运行一百次左右的测试。程序本身正处于生产的最后阶段,我的老板想让我去掉所有硬编码的变量并将它们存储在一个.properties文件中。现在我有两个java文件Logic.java和Tests.java,以及一个属性文件xxx.properties。但是,当我运行代码(Tests.java中的JUnit测试)时,看起来属性永远不会被加载。相关代码如下:无法从属性文件中读取

在Logic.java

Properties properties = new Properties(); 

String val1; 
String val2; 
... 
String last_val; 

public void importProperties() { 
    try { 
    properties.load(new FileInputStream("xxx.properties")); 
    val1 = properties.getProperty("val1-property-name"); 
    ... 
    lastVal = properties.getProperty("lastVal-property-name"); 
    } catch (Exception e) { 
    e.printStackTrace(); 
    } 
} 

public void test() { 
    importProperties(); 
    //Testing code follows, several method calls referencing val1, val2, etc 
} 

在Tests.java

Logic logic = new Logic(); 

@Before 
public void before() { 
    logic.importProperties(); 
} 

@Test 
public void test1() { 
    logic.testMethod(); 
} 

//More tests 

}

我要导入的属性和Logic.java设置字符串瓦尔斯在@Before方法中,因为我没有创建Logic的新实例(或者我相信),但是当我尝试查找字符串的值(将字符串值写入日志文件)时,没有在所述文件中分机。我知道日志文件的写作工作,所以字符串没有被设置为它们的属性值。我的财产文件也是正确书写的,如有必要,我可以提供更多信息。谢谢!

编辑:所以经过一系列的故障排除之后,它看起来好像属性文件肯定被读取,因为一个properties.keys()调用返回所有的键。然而,这并不是将字符串设置为关键值。尽管如此故障排除,但任何意见将是有益

+2

行你检查的路径是正确的? '新的FileInputStream(“xxx.properties”)' – evanwong

回答

1

再次更换

properties.load(new FileInputStream("xxx.properties")); 

properties.load(new InputStreamReader(Logic.class.getResource("xxx.properties").openStream(), "UTF8")); 

&测试。我希望它能解决你的问题

+0

我试过你的解决方案几种不同的方式(重新安排进口/方法调用)以及@ mprabhat的建议,但无济于事。我认为这是我程序中的其他问题,但我不会忘记你的建议。如果还有什么其他的你认为可能是我的原因,我会很感激你的反馈,同时我会定期停下来看看其他的建议和(希望能够)标记为已接受 – Chris

+0

我终于弄清楚了什么错了!这是我的属性文件中的路径排印错误和(修复所述文件后)我加载属性的方式的组合。你的建议终于完成了,谢谢! – Chris

0

我认为你的属性文件没有找到,这就是整个问题。

不是创建一个新的FileInputStream尝试使用下面的代码

properties.load(this.getClass().getResourceAsStream("xxx.properties"));