我使用Eclipse Kepler和Tomcat 7(localhost),我的项目是动态Web项目。
我有一个需要加载一些属性文件的类:
File dir = null;
try {
dir = new File(globalPropertiesFolder);
} catch (NullPointerException e) {
log.error("Could not open the specified properties folder: "
+ globalPropertiesFolder, e);
}
if (dir == null) {
log.error("Could not open the specified properties folder: "
+ globalPropertiesFolder);
return;
}
FilenameFilter filter = new FilenameFilter() {
public boolean accept(File dir, String name) {
boolean res = false;
res = !name.endsWith("dynamic.properties");
if (!name.endsWith(".properties"))
res = false;
return res;
}
};
String[] children = dir.list(filter);
其中 globalPropertiesFolder 是一个等于" config / properties"的字符串。
我在这个类中有一个用于测试某些方法的main,当我将它作为Java Application运行时,找到属性,并且children变量填充了该文件夹的内容,但是,当我运行它时,整个项目都在服务器(Tomcat)它无法找到属性。
我注意到当我将它作为Java应用程序运行时,该文件具有不同的绝对路径(dir.getAbsolutePath()
),当我在服务器上运行它时,最后的问题是:如何列出文件夹上的文件在使用Eclipse和Tomcat作为服务器的动态Web项目上?如果我至少可以列出所有这些,然后我可以加载我需要的所有文件。
答案 0 :(得分:2)
在独立应用程序和Web应用程序中查找文件的可靠方法是通过类路径,如下所示:
ClassLoader cl = this.getClass().getClassLoader();
InputStream is = cl.getResourceAsStream("resources/foo.properties");
将通过类加载器搜索指定的文件名,即相对于任何应用程序的类路径条目。例如,在此示例中,您可以在resources/foo.properties
文件夹中创建src
,并且可以在独立模式和Web模式下找到它。
不幸的是,这要求您事先知道相关文件名,即在加载之前无法列出它们。