يوفر ClassLoader طريقتين للحصول على الموارد من ClassPath المحملة:
عنوان URL العام getResource (اسم السلسلة) ؛ public inputstream getResourCeasStream (اسم السلسلة) ؛
الاسم هنا هو classpath من المورد ، وهو بالنسبة لمسار الجذر "/". يحصل GetResource على كائن عنوان URL لتحديد موقع المورد ، ويحصل GetResourCeasStream على إشارة إلى دفق إدخال الموارد للتأكد من أن البرنامج يمكنه استخراج البيانات من الموقع الصحيح.
لكن ما نستخدمه حقًا ليس أساليب ClassLoader ، ولكن أساليب GetResource و GetResourCeasstream الخاصة بالفئة ، لأنه يمكن الحصول على كائن الفصل من فصلك (مثل yourclass.class أو yourclass.getclass ()) ، ويحتاج chloader إلى استدعاء طريقة yourclass.getClassloader () مرة أخرى. ومع ذلك ، وفقًا لوثائق JDK ، فإن هاتين الطريقتين من كائن الفئة هما في الواقع "تفويض" إلى جهاز التحميل الذي يحمله ، لذلك تحتاج فقط إلى استخدام هاتين الطريقتين من كائن الفئة.
لذلك ، استدعاء هذا. getClass (). getResourCeasStream (اسم السلسلة) للحصول على الدفق ، واستخدام classloader.getSystemResourCeasStream (اسم السلسلة) في الطريقة الثابتة.
فيما يلي بعض الطرق للحصول على classpath والمسار المطلق للطبقة الحالية. قد تحتاج إلى استخدام بعض هذه الطرق للحصول على المسار المطلق للموارد التي تحتاجها.
1.Tis.getClass (). getResource ("")
ما تحصل عليه هو دليل URI لملف الفئة الحالي. لا تشمل نفسك!
على سبيل المثال: ملف:/d:/workspace/jbpmtest3/bin/com/test/
2. This.getClass (). getResource ("/")
ما تحصل عليه هو مسار URI المطلق لل classpath الحالي.
على سبيل المثال: ملف:/d:/workspace/jbpmtest3/bin/
3. This.getClass () .getClassloader (). getResource ("")
ما تحصل عليه هو أيضًا مسار URI المطلق لـ ClassPath الحالي.
على سبيل المثال: ملف:/d:/workspace/jbpmtest3/bin/
4.Classloader.getSystemResource ("")
ما تحصل عليه هو أيضًا مسار URI المطلق لـ ClassPath الحالي.
على سبيل المثال: ملف:/d:/workspace/jbpmtest3/bin/
5.Thread.CurrentTher (). getContextClassloader (). getResource ("")
ما تحصل عليه هو أيضًا مسار URI المطلق لـ ClassPath الحالي.
على سبيل المثال: ملف:/d:/workspace/jbpmtest3/bin/
6.ServleTactionContext.getServletContext (). getRealPath ("/")
في تطبيق الويب ، احصل على المسار المطلق إلى الدليل الجذر لتطبيق الويب. وبهذه الطريقة ، نحتاج فقط إلى توفير مسار بالنسبة للدليل الجذر لتطبيق الويب لبناء مسار مطلق لتحديد الموارد.
على سبيل المثال: ملف: /d:/workspace/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/webproject
ملحوظة:
1. حاول عدم استخدام المسار النسبي بالنسبة إلى System.GetProperty ("user.dir") دليل المستخدم الحالي. هذه قنبلة زمنية قد تقتلك في أي وقت.
2. حاول استخدام موارد المسار المطلق في شكل URI. يمكن تحويله بسهولة إلى URI ، URL ، كائنات الملف.
3. حاول استخدام ClassPaths النسبية. لا تستخدم المسارات المطلقة. باستخدام طريقة url الثابتة العامة getextendResource (سلسلة REPORATION) لفئة ClassLoaderUtil أعلاه ، يمكنك بالفعل تحديد موقع الموارد في جميع المواقع باستخدام المسار النسبي بالنسبة إلى classpath.
4. بالتأكيد لا تستخدم المسارات المطلقة المرمزة. لأنه ، يمكننا استخدام طريقة getResource ("") لفئة تحميل classload للحصول على المسار المطلق للفئة الحالية. إذا كان عليك تحديد مسار مطلق ، فإن استخدام ملفات التكوين أفضل بكثير من الترميز الشاق!
كيفية الحصول على مسار خارج classpath:
قاعدة url = this.getClass (). getResource ("") ؛ // أولاً احصل على موقع هذه الفئة ، مثل/home/popeye/testjava/build/classes/net/
string path = ملف جديد (base.getFile () ، ".../.../.../.../"+name) .getCanonicalPath () ؛ // يمكنك الحصول على/الصفحة الرئيسية/popeye/testjava/الاسم
بالإضافة إلى ذلك ، إذا بدأت البرنامج من ANT ، فإن الاسترجاع من this.getClass (). getResource ("" غريب للغاية ، ويمكنك تصحيحه بنجاح مع خط أوامر Java.
لنلقي نظرة على طريقة الحصول على classpath classpath في جافا
لقد قلت أكثر من ذلك بكثير ، لذلك سأقوم بنشر رمز المفتاح إليك مباشرة. الرمز المحدد كما يلي:
<span style = "font-size: 18px ؛"> system.out.println ("+++++++++++++++++++++++++++++++++++" freemarkerWriter.class.getProtectionDomain (). getCodesource (). getLocation (). getPath () 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.eprintln ( path4) ؛ system.out.println ("++++++++++++++++++++++++++++++++") ؛ </span>ما سبق هو الكود البسيط للطريقة للحصول على classpath classpath في Java المقدمة لك من قبل المحرر. آمل أن يكون ذلك مفيدًا لك. إذا كان لديك أي أسئلة ، يرجى ترك رسالة لي. سوف يرد المحرر إليك في الوقت المناسب!