我有以下代码片段在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
答案 0 :(得分:3)
它不起作用,因为,如URL所示,它指向JAR文件内的位置,该位置不是文件系统的现有位置:/C:/oc4j_extended_101330/j2ee/home/applications/MyEAR/MyEJB.jar!/com/me/a/service/impl/helper/Logger
不是现有目录。
您永远不应该依赖从指向文件系统中某个位置的类加载器加载的资源,因为大多数情况下,资源都嵌入在jar文件中。