English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

JAVAでCLASSPATHパスを取得する方法の詳細な説明

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(メール送信時は、#を@に変更してください)で通報し、関連する証拠を提供してください。一旦確認ができ次第、このサイトは侵害された内容をすぐに削除します。

おすすめ