我有一个具有以下目录结构的Eclipse项目:
MyProj
>> src/main/java
>> src/main/config
>> src/test/java
>> src/test/config
在src/test/config
内部,我有一个名为app.properties
的属性文件,其中包含src/main/java
和src/test/java
中的类都使用的属性。
我用来查找属性文件的所有代码如下所示:
try {
Properties props = new Properties();
props.load(new FileInputStream("app.properties"));
someString = props.getProperty("app.title.color");
// etc.
} catch(Exception exc) {
// Handle exception...
}
但是当我运行这个时,我收到以下错误(在上面的catch
子句中处理):
java.io.FileNotFoundException: app.properties(系统找不到指定的文件)
但是当我将app.properties
文件移动到我的项目根目录(与src/main/java
处于同一级别)并重新运行代码时,它运行良好。
显然,这是一个类路径问题。如果我转到Build Path >> Configure Build Path >> Source
,我发现src/test/config
实际上是构建路径上的源文件夹。这可能并不意味着它也在类路径上 !!!
如何配置Eclipse以在类路径上查找src/test/config
,以便我可以将我的属性文件放在那里,但仍然可以在运行时使用它(当我运行单元测试时)?
提前致谢!
答案 0 :(得分:3)
执行此操作的正确方法(将确保代码继续工作,如果它被放入JAR中)是将src/test/config
添加到项目的类路径中,并使用{加载资源{1}} getResourceAsStream()
的方法。 e.g。
ClassLoader
答案 1 :(得分:2)
这不是一个类路径问题(因为你没有在这里加载一个类!) - 问题是你的代码是相对于当前工作目录加载文件的,默认情况下你的项目根目录。 FileInputStream不知道类路径是什么 - 它只是加载文件!
您可以指定文件的路径:
props.load(new FileInputStream("src/test/config/app.properties"));
虽然最好在配置行(或Eclipse运行配置文件)中将config目录指定为系统属性:
-Dconfig.dir="src/test/config/"
然后加载相对于此目录的文件,如:
public static final String CONFIG_DIR = System.getProperty("config.dir");
props.load(new FileInputStream(CONFIG_DIR+"app.properties"));
答案 2 :(得分:0)
合并文件夹,但您必须以不同方式访问属性文件,作为相对于类的资源:
InputStream is = YourClassName.class.getResourceAsStream("/app.properties");
注意前导“/”。