ClassLoaderは、ロードされたクラスパスからリソースを取得するための2つの方法を提供します。
public url getResource(string name); public inputstream getResourceAsStream(String name);
ここで、名前はリソースのクラスパスであり、「/」ルートパスに関連しています。 GetResourceはURLオブジェクトを取得してリソースを見つけます。GetResourceAsStreamは、リソース入力ストリームへの参照を取得して、プログラムが正しい場所からデータを抽出できるようにします。
しかし、クラスオブジェクトはクラス(YourClass.classまたはYourClass.getClass()など)から取得できるため、クラスのローダーメソッドではなく、クラスのgetResourceとgetResourceasStreamメソッドです。ただし、JDKドキュメントによると、クラスオブジェクトのこれら2つのメソッドは、実際にそれをロードするクラスローダーに「委任」しているため、クラスオブジェクトのこれら2つの方法のみを使用する必要があります。
したがって、this.getClass()を直接呼び出してください。GetResourceAsStream(String name)ストリームを取得し、ClassLoader.getSystemResourceAsStream(String name)を静的メソッドで使用します。
ClassPathと現在のクラスへの絶対的なパスを取得するいくつかの方法を以下に示します。これらの方法のいくつかを使用して、必要なリソースへの絶対的なパスを取得する必要がある場合があります。
1.This.getClass()。getResource( "")
あなたが得るのは、現在のクラスファイルのURIディレクトリです。自分を含まない!
例:/d:/workspace/jbpmtest3/bin/com/test/
2. this.getClass()。getResource( "/")
あなたが得るのは、現在のクラスパスの絶対的なURIパスです。
例:/d:/workspace/jbpmtest3/bin/
3.This.getClass().getClassLoader()。getResource( "")
あなたが得るのは、現在のクラスパスの絶対的なURIパスでもあります。
例:/d:/workspace/jbpmtest3/bin/
4.ClassLoader.getSystemResource( "")
あなたが得るのは、現在のクラスパスの絶対的なURIパスでもあります。
例:/d:/workspace/jbpmtest3/bin/
5.thread.currentthread()。getContextClassLoaser()。getResource( "")
あなたが得るのは、現在のクラスパスの絶対的なURIパスでもあります。
例:/d:/workspace/jbpmtest3/bin/
6.ServletactionContext.getServletContext()。getRealPath( "/")
Webアプリケーションで、Webアプリケーションのルートディレクトリへの絶対パスを取得します。このようにして、リソースを見つけるための絶対パスを構築するために、Webアプリケーションのルートディレクトリに関連するパスを提供する必要があります。
たとえば、file:/d:/workspace/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/webproject
注記:
1. System.getProperty( "user.dir")の現在のユーザーディレクトリに相対的な相対パスを使用しないようにしてください。これはいつでもあなたを殺すかもしれない時限爆弾です。
2。URIの形で絶対パスリソースを使用してみてください。 URI、URL、ファイルオブジェクトに簡単に変換できます。
3.相対的なクラスパスを使用してみてください。絶対パスを使用しないでください。上記のclassloaderutilクラスのpublic static url getextendResource(string relativepath)メソッドを使用すると、クラスパスに対する相対パスを使用してすべての場所でリソースを見つけることができます。
4.ハードコーディングされた絶対パスを絶対に使用しないでください。なぜなら、クラスローダークラスのgetResource( "")メソッドを使用して、現在のクラスパスの絶対パスを取得できるからです。絶対パスを指定する必要がある場合、構成ファイルを使用することもハードコーディングよりもはるかに優れています!
ClassPathの外にパスを取得する方法:
url base = this.getClass()。getResource( ""); //最初に/home/popeye/testjava/build/classes/net/などのこのクラスの場所を取得
string path = new file(base.getFile()、 "…/…/…/…/”+name).getCanonicalPath(); //あなたは取得/ホーム/ポパイ/testjava/nameを取得できます
さらに、ANTからプログラムを開始すると、this.getClass()から取得しました。GetResource( ""は非常に奇妙であり、Javaコマンドラインで正常にデバッグできます。
JavaでClassPath ClassPathを取得する方法を見てみましょう
もっと言ったので、重要なコードを直接投稿します。特定のコードは次のとおりです。
<Span style = "font-size:18px;"> system.out.println( "++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++"); string path = system.getProperty( "java.class.path"); String Path2 = freemarkerwriter.class.getProtectionDomain()。getCodesource()。getLocation()。getPath(); string path3 = freemarkerwriter.class.getProtectionDomain()。getCodesource()。getFile() thread.currentThread()。getContextClassLoader()。getResource( "")。getPath(); system.out.println( "path 1 =" + path); system.out.println( "path 2 =" + path2); system.out.println( "path 3 =" + + " + path3) Path4); System.out.Println( "+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++"); </span>
上記は、編集者が紹介したJavaでClassPath ClassPathを取得する方法の単純なコードです。それがあなたに役立つことを願っています。ご不明な点がございましたら、メッセージを残してください。編集者は時間内に返信します!