JAVA CLASSPATHパスの取得方法詳細

3564 ワード

Class Loaderは、ロードされたクラスパスからリソースを取得するための2つの方法を提供する。

  public URL getResource (String name); 
    public InputStream getResourceAsStream (String name); 
       ここでnameはリソースのクラスパスであり、これは相対的にルートの下の位置である。getsResourceは、リソースを位置付けするURLオブジェクトを取得し、このリソース入力ストリームの参照保証プログラムを取得すると、正しい位置からデータを抽出することができる。
       しかし、本当に使うのはクラスリーダーのこの二つの方法ではなく、クラスのget Resourceとget Resource Aspream方法です。Classオブジェクトはあなたのクラスから得られます。(YourClass.classやYourClass.get Class()、Class Loaderはもう一度YourClass.Classを呼び出す必要があります。Classオブジェクトのこの二つの方法は実は「委託」です。それを搭載したクラスリーダーに作ったのです。だから、クラスのオブジェクトを使う二つの方法だけでいいです。
       したがって、直接呼び出し  this.get Class().getsResource AsStream(String name);ストリームを取得し、静的化する方法では、Class Loader.get System Resource AsStream(String name)を使用する。
      次は、クラスパスと現在の絶対パスを得るいくつかの方法です。その中のいくつかの方法を使って、必要な資源の絶対パスを得る必要があります。
1.this.get Class().getsResource(")
得られたのは現在のクラスクラスのクラスクラスのファイルのURIディレクトリです。自分を含めないfile:/D:/workspace/jbpmtest 3/bin/com/test/
2.this.get Class().getsResource(「/」)
得られたのは現在のクラスパスの絶対URIパスです。file:/D:/workspace/jbpmtest 3/bin/
3.this.get Class().get Class Loader().getsResource(")
得られたのも現在のクラスパスの絶対URIパスです。file:/D:/workspace/jbpmtest 3/bin/
4.Class Loader.get System Resource(「」)
得られたのも現在のクラスパスの絶対URIパスです。file:/D:/workspace/jbpmtest 3/bin/
5.Thread.current Thread().get Contact Class Loader().get Resource(")
得られたのも現在のクラスパスの絶対URIパスです。file:/D:/workspace/jbpmtest 3/bin/
6.ServletAction Contect.get Servlet Controtext().getRealPath(/)
Webアプリケーションでは、Webアプリケーションのルートディレクトリの絶対パスが得られます。このように、ウェブアプリケーションのルートディレクトリに対するパスを提供するだけで、位置特定リソースの絶対パスを構築することができる。
file:/D:/workspace/.metadata/.plugins/org.eclipse.wut.server.com/tmp 0/wtpwebapps/WebProject
注意点:
1.System.get Property(「user.dir」)現在のユーザディレクトリに対する相対パスは、できるだけ使わないでください。これは時限爆弾です。いつでもあなたの命が必要です。
2.できるだけURI形式の絶対パスリソースを使用する。URI,URL,Fileオブジェクトに簡単に変換できます。
3.できればclassipathに対する相対パスを使用します。絶対パスは使用しないでください。上のClass LoaderUtil類のpublic static URL get Extens Resource(String relativePath)方法を使用して、classityに対する相対的な経路を使用して、すべての位置のリソースを位置付けすることができます。
4.ハードコードの絶対パスは絶対に使用しないでください。なぜなら、Class Loader類のget Resource(「」)法を使用して、現在のクラスパスの絶対パスを得ることができるからです。絶対パスを指定したいなら、配置ファイルを使っても、ハードコードよりずっといいです。
CLASSPATH以外のパスを得る方法:
URL base=this.get Class().getsResource(")//。まずこのクラスの位置を獲得します。例えば/home/popeye/testjava/build/clases/net/        Stering path=new File(base.get File),「…///」+name).gets CannicalPath()///////取得できる/home/popeye/testjava/name
また、ANTからプログラムを起動すれば、this.get Class().gets Resource(")が取り出したのが変です。JAVAコマンドで直接デバッグすれば成功できます。
以下はJavaを見てクラスパスのclassipathを取得する方法です。
余計な話をして、直接にキーコードを貼りました。具体的なコードは下記の通りです。


System.out.println("++++++++++++++++++++++++");
String path = System.getProperty("java.class.path");
String path2 = FreeMarkerWriter.class.getProtectionDomain().getCodeSource().getLocation().getPath();
String path3 = FreeMarkerWriter.class.getProtectionDomain().getCodeSource().getLocation().getFile();
String path4 = Thread.currentThread().getContextClassLoader().getResource("").getPath();
System.out.println("path 1 = " + path);
System.out.println("path 2 = " + path2);
System.out.println("path 3 = " + path3);
System.out.println("path 4 = " + path4);
System.out.println("++++++++++++++++++++++++");
以上は小编が皆さんに绍介したJavaでクラスパスのclassipathを取得する方法の简単なコードです。皆さんに助けてほしいです。もし何か疑问があれば、メッセージをください。小编はすぐに返事します。