我将 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 项目的文件夹中列出文件?如果我至少可以,列出所有这些,然后我可以加载我需要的所有文件。
最佳答案
在独立应用程序和 Web 应用程序中定位文件的可靠方法是通过类路径,如下所示:
ClassLoader cl = this.getClass().getClassLoader();
InputStream is = cl.getResourceAsStream("resources/foo.properties");
指定的文件名将通过类加载器搜索,即相对于您应用程序的任何类路径条目。例如,在此示例中,您可以在 src
文件夹中创建 resources/foo.properties
,它可以在独立模式和网络模式下找到。
不幸的是,这需要您提前知道相关文件名,即您无法在加载之前列出它们。
关于java - 如何从 Eclipse 的动态 Web 项目路径中读取文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26983024/