ClassLoader menyediakan dua metode untuk mendapatkan sumber daya dari ClassPath yang dimuat:
URL publik getResource (nama string); inputStream publik getResourceAsstream (nama string);
Di sini nama adalah classpath dari sumber daya, yang relatif terhadap jalur root "/". GetResource mendapatkan objek URL untuk menemukan sumber daya, dan GetResourceAsstream mendapatkan referensi ke aliran input sumber daya untuk memastikan bahwa program dapat mengekstrak data dari lokasi yang benar.
Tetapi yang benar -benar kami gunakan bukanlah metode ClassLoader, tetapi metode GetResource dan GetResourceAsstream kelas, karena objek kelas dapat diperoleh dari kelas Anda (seperti class.class Anda atau metode Anda lagi. Namun, menurut dokumentasi JDK, kedua metode objek kelas ini sebenarnya "mendelegasikan" ke classloader yang memuatnya, jadi Anda hanya perlu menggunakan dua metode objek kelas ini.
Oleh karena itu, langsung panggil this.getClass (). GetResourceAsstream (nama string) untuk mendapatkan stream, dan menggunakan classloader.getSystemResourCeAsstream (nama string) dalam metode statis.
Berikut adalah beberapa cara untuk mendapatkan Classpath dan jalur absolut ke kelas saat ini. Anda mungkin perlu menggunakan beberapa metode ini untuk mendapatkan jalur absolut ke sumber daya yang Anda butuhkan.
1. This.getClass (). GetResource ("")
Yang Anda dapatkan adalah direktori URI dari file kelas saat ini. Tidak termasuk diri Anda sendiri!
Misalnya: File:/d:/workspace/jbpmtest3/bin/com/test/
2. This.getClass (). GetResource ("/")
Apa yang Anda dapatkan adalah jalur URI absolut dari classpath saat ini.
Misalnya: File:/d:/workspace/jbpmtest3/bin/
3. This.getClass () .getClassLoader (). GetResource ("")
Apa yang Anda dapatkan juga merupakan jalur URI absolut dari Classpath saat ini.
Misalnya: File:/d:/workspace/jbpmtest3/bin/
4.classloader.getsystemResource ("")
Apa yang Anda dapatkan juga merupakan jalur URI absolut dari Classpath saat ini.
Misalnya: File:/d:/workspace/jbpmtest3/bin/
5.thread.currentThread (). GetContextClassLoader (). GetResource ("")
Apa yang Anda dapatkan juga merupakan jalur URI absolut dari Classpath saat ini.
Misalnya: File:/d:/workspace/jbpmtest3/bin/
6.ServLetActionContext.GetSerVletContext (). GetRealPath ("/")
Dalam aplikasi web, dapatkan jalur absolut ke direktori root aplikasi web. Dengan cara ini, kita hanya perlu menyediakan jalur relatif terhadap direktori root aplikasi web untuk membangun jalur absolut untuk menemukan sumber daya.
Misalnya: File: /d:/workspace/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/webproject
Catatan:
1. Cobalah untuk tidak menggunakan jalur relatif relatif terhadap System.getProperty ("user.dir") direktori pengguna saat ini. Ini adalah bom waktu yang mungkin membunuh Anda kapan saja.
2. Cobalah untuk menggunakan sumber daya jalur absolut dalam bentuk URI. Ini dapat dengan mudah dikonversi menjadi objek URI, URL, file.
3. Cobalah menggunakan Classpaths relatif. Jangan gunakan jalur absolut. Menggunakan metode URL statis URL getextendResource (String RelativePath) dari kelas ClassLoaderutil di atas, Anda sudah dapat menemukan sumber daya di semua lokasi menggunakan jalur relatif relatif terhadap ClassPath.
4. Benar-benar tidak menggunakan jalur absolut yang dikodekan dengan keras. Karena, kita dapat menggunakan metode getResource ("") dari kelas ClassLoader untuk mendapatkan jalur absolut dari ClassPath saat ini. Jika Anda harus menentukan jalur absolut, maka menggunakan file konfigurasi juga jauh lebih baik daripada hard-coded!
Cara mendapatkan jalan di luar Classpath:
Url base = this.getClass (). GetResource (""); // Pertama dapatkan lokasi kelas ini, seperti/home/popeye/testjava/build/class/net/
String path = file baru (base.getFile (), ".../.../.../.../"+name) .getCanonicalPath (); // Anda bisa mendapatkan/home/popeye/testjava/nama
Selain itu, jika Anda memulai program dari ANT, yang diambil dari this.getClass (). GetResource ("" cukup aneh, dan Anda dapat berhasil men -debug dengan baris perintah Java.
Mari kita lihat metode untuk mendapatkan ClassPath Classpath di Java
Saya sudah mengatakan lebih banyak, jadi saya akan memposting kode kunci kepada Anda secara langsung. Kode spesifiknya adalah sebagai berikut:
<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. path4); System.out.println ("++++++++++++++++++++++++++++++++++"); </span>Di atas adalah kode sederhana dari metode ini untuk mendapatkan ClassPath ClassPath di Java diperkenalkan kepada Anda oleh editor. Saya harap ini akan membantu Anda. Jika Anda memiliki pertanyaan, silakan tinggalkan saya pesan. Editor akan membalas Anda tepat waktu!