【发布时间】:2009-07-27 14:15:40
【问题描述】:
我遇到了试图从类本身的 .class 文件所在的同一目录中读取一些配置文件的代码:
File[] configFiles = new File(
this.getClass().getResource(".").getPath()).listFiles(new FilenameFilter() {
public boolean accept(File dir, String name) {
return name.endsWith(".xml");
}
});
显然这在某些情况下有效(可能在 Resin 中运行代码时),但对我来说,运行 Tomcat 时,它会因 NPE 而失败,因为getClass().getResource(".") 返回null。
一位同事建议创建另一个配置文件,其中包含所有“.xml”配置文件的列表(它确实可以在这里工作,因为它保持完全静态),并且你不应该真的尝试在 Java 中做这样的事情.
不过,我想知道是否有 some 好方法,它普遍适用,用于获取给定 .class 文件所在目录的路径?我想你可以像这样从 .class 文件本身的路径中获取它:
new File(this.getClass().getResource("MyClass.class").getPath()).getParent()
...但这是唯一/最干净的方式吗?
编辑:为了澄清起见,假设我们知道这是在以这样一种方式部署的应用程序中使用的,即 MyClass.class 将始终从 .class 文件中读取磁盘,资源将在同一目录中。
【问题讨论】:
-
找到了这个相关问题:stackoverflow.com/questions/778187/… 它接受的答案基本上使用了我建议的内容 [ getResource("MyClass.class").getPath() ] ...但它没有直接回答是否是唯一或最好的方法。