1

我有以下代码片段在 OC4J 的 EJB 代码中不起作用:

String name = getClass().getPackage().getName();
name = name.replace('.','/');
URL url = this.getClass().getClassLoader().getResource(name);
File directory = new File(url.getFile());
System.out.println("url.getFile() : " + url.getFile());

if (directory.exists())     // returns false!, why??
{
    System.out.println("directory.exists() : " + directory.exists());

}

输出是:

url.getFile() : /C:/oc4j_extended_101330/j2ee/home/applications/MyEAR/MyEJB.jar!/com/me/a/service/impl/helper/Logger

但在独立模式下,输出为:

url.getFile() : /D:/eclipse/workspace/MyEJB/build/classes/com/me/a/service/impl/helper/Logger
directory.exists() : true
4

1 回答 1

3

它不起作用,因为如 URL 所示,它指向 JAR 文件中的一个位置,该位置不是文件系统的现有位置:/C:/oc4j_extended_101330/j2ee/home/applications/MyEAR/MyEJB.jar!/com/me/a/service/impl/helper/Logger不是现有目录。

您永远不应该依赖从指向文件系统中某个位置的类加载器加载的资源,因为大多数时候,资源嵌入在 jar 文件中。

于 2011-08-01T12:48:11.233 回答