如何从动态Web项目上的Eclipse路径读取文件?

时间:2014-11-17 22:17:18

标签: java eclipse file tomcat

我使用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项目上?如果我至少可以列出所有这些,然后我可以加载我需要的所有文件。

1 个答案:

答案 0 :(得分:2)

在独立应用程序和Web应用程序中查找文件的可靠方法是通过类路径,如下所示:

    ClassLoader cl = this.getClass().getClassLoader();
    InputStream is = cl.getResourceAsStream("resources/foo.properties");

将通过类加载器搜索指定的文件名,即相对于任何应用程序的类路径条目。例如,在此示例中,您可以在resources/foo.properties文件夹中创建src,并且可以在独立模式和Web模式下找到它。 不幸的是,这要求您事先知道相关文件名,即在加载之前无法列出它们。