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 に答える