English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
ClassLoaderは、ロードされたクラスパスからリソースを取得するために2つのメソッドを提供しています:
public URL getResource(String name); public InputStream getResourceAsStream(String name);
ここではnameはリソースのクラスパスで、それが「/”ルートパスの位置です。getResourceはリソースを定位するURLオブジェクトを取得し、getResourceAsStreamはそのリソースの入力ストリームの参照を取得します。これにより、プログラムは正しい位置からデータを抽出できます。
しかし実際に使用しているのは、ClassLoaderのこれら2つのメソッドではなく、ClassのgetResourceおよびgetResourceAsStreamメソッドです。なぜなら、Classオブジェクトはあなたのクラスから取得できます(例:YourClass.classやYourClass.getClass())が、ClassLoaderはまたYourClass.getClassLoader()メソッドを再呼び出す必要があります。しかし、JDKドキュメントによると、Classオブジェクトのこれら2つのメソッドは実際には「委譲」(delegate)されてClassLoaderによって実行されるため、Classオブジェクトのこれら2つのメソッドを使用すれば十分です。
したがって、ストリームを直接取得するために this.getClass().getResourceAsStream(String name); を呼び出し、静的メソッドでは ClassLoader.getSystemResourceAsStream(String name); を使用します。
以下は、classpathと現在のクラスの絶対パスを取得するための方法の一覧です。必要に応じて、その中の方法を使用して必要なリソースの絶対パスを取得する必要があります。
1.this.getClass().getResource("")
現在のクラスのclassファイルのURIディレクトリを取得しています。自身を含まないです!
例えば:file:/D:/workspace/jbpmtest3/bin/com/test/
2.this.getClass().getResource(""/")
現在のclasspathの絶対URIパスを取得しています。
例えば:file:/D:/workspace/jbpmtest3/bin/
3.this.getClass().getClassLoader().getResource("")
取得されるのは現在のCLASSPATHの絶対URIパスです。
例えば:file:/D:/workspace/jbpmtest3/bin/
4.ClassLoader.getSystemResource("")
取得されるのは現在のCLASSPATHの絶対URIパスです。
例えば:file:/D:/workspace/jbpmtest3/bin/
5.Thread.currentThread().getContextClassLoader().getResource("")
取得されるのは現在のCLASSPATHの絶対URIパスです。
例えば:file:/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、Fileオブジェクトに変換できます。
3.CLASSPATHの相対パスを使用することを推奨します。絶対パスを使用しないでください。ClassLoaderUtilクラスのpublic static URL getExtendResource(String relativePath)メソッドを使用して、CLASSPATHの相対パスですべての場所のリソースを定位することができます。
4.絶対に硬コーディングされた絶対パスを使用しないでください。なぜなら、ClassLoaderクラスのgetResource("")メソッドを使用して、現在のCLASSPATHの絶対パスを取得することができます。絶対パスを指定する必要がある場合は、設定ファイルを使用することも硬コーディングよりもはるかに良いです!
CLASSPATH以外のパスを取得する方法:
URL base = this.getClass().getResource(""); //まず、このクラスの位置を取得します。/home/popeye/testjava/build/classes/net/
String path = new File(base.getFile(), "……/……/……/"+name).getCanonicalPath(); //それで、/home/popeye/testjava/name
また、ANTからプログラムを起動した場合、this.getClass().getResource(
次に、Javaでクラスパス(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().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("++++++++++++++++++++++++"); </span>
以下は、編集者が皆さんに紹介するJavaでクラスパス(classpath)を取得する方法の簡単なコードです。皆さんに役立つことを願っています。何かご不明な点があれば、コメントを残してください。編集者はすぐに回答します。
声明:この記事の内容はインターネットから取得しており、著作権者は所有者であり、インターネットユーザーが自発的に貢献し、アップロードしました。このサイトは所有権を有しないものであり、人工編集は行われていません。著作権侵害が疑われる内容がある場合は、notice#wまでメールを送ってください。3codebox.com(メール送信時は、#を@に変更してください)で通報し、関連する証拠を提供してください。一旦確認ができ次第、このサイトは侵害された内容をすぐに削除します。