2013-03-06 78 views
0

我有一个通过ant构建的jav aproject。它将类文件写入output/classes/com/...路径。我的一个java类需要从位于输出文件夹上一级文件夹的文件中读取输入流。看起来像是如果将文件复制到outptu/classes下的包文件夹中,它似乎工作。但我不想在输出文件夹中保存我的配置文件,因为当我做蚂蚁清理时它将被清理。我希望它找到它在输出文件夹上方,在config文件夹中并加载它。getResourceAsStream方法的相对路径

public static final String CONFIG_FILE="/../../../../../../../Config.txt"; 

public static ConfigObj getConfigObj() throws IOException { 

InputStream i=ConfigLoader.class.getResourceAsStream(CONFIG_FILE); 

...

我想知道什么时候我想给raltivepath,它应该是相对。我试着向上看,它说相对于类加载器。在这种情况下什么是类加载器?它是我的ConfigLoader.class所在的输出/ classes/com ....../config文件夹吗?

回答

1

问题是getResourceAsStream()将只从类路径加载资源。我猜你的类路径上只有output/classes,所以如果在该目录之外,你将永远无法通过getResourceAsStream()加载配置文件。使用带有指向该文件的绝对路径的File,或将其放入类路径中。

+0

非常感谢zagyi。但绝对路径不可移植,是否有其他方式可以给出相对于输出文件夹的路径?将目录添加到类路径看起来不太友好。 – learningtocode 2013-03-06 21:29:57

+0

如果它实际上是一个用户配置文件,那么我猜用户会根据操作系统特定的约定将它放置在其用户主目录下的某个位置。如果你坚持让它与编译的类相关,那么尝试使用[本文]中描述的技术(http://stackoverflow.com/a/676413/1276804)。不过,我不确定这些解决方案的稳健性。 – zagyi 2013-03-06 21:49:41