English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
ClassLoader يقدم طريقتين لاستخراج الموارد من مسار الحزم المحملة:
public URL getResource (String name); public InputStream getResourceAsStream (String name);
هنا name هو مسار المورد، وهو موضع نسبيًا لـ “/” مسار الجذر. يوفر getResource كائن URL لتحديد المورد، بينما يوفر getResourceAsStream استناد إلى تدفق الدخول للمورد لضمان أن يمكن للبرنامج استخراج البيانات من الموضع الصحيح.
لكن ما يستخدمه ليس هذين الطريقي لـ ClassLoader، بل طرق getResource وgetResourceAsStream لـ Class، لأن يمكن الحصول على Class من خلال الفئة (مثل YourClass.class أو YourClass.getClass())، بينما يتطلب ClassLoader استدعاء مرة أخرى YourClass.getClassLoader()، ومع ذلك، وفقًا لمستندات JDK، فإن هذين الطريقي لـ Class يُعطيان في الواقع
لذلك، يتم استدعاء this.getClass().getResourceAsStream(String name) مباشرة للحصول على تدفق، وفي الطرق الثابتة يتم استخدام ClassLoader.getSystemResourceAsStream(String name)؛
إليك بعض الطرق للحصول على مسار classpath والمسار المطلق للفئة. قد تحتاج إلى استخدام بعض هذه الطرق للحصول على مسار الموارد المطلق.
1 this.getClass().getResource("")
المسار المكتسب هو مسار URI الدليل الحالي للفئة class. لا يشمل نفسه!
مثلاً: file:/D:/workspace/jbpmtest3/bin/com/test/
2 this.getClass().getResource("/")
المسار المكتسب هو مسار URI المطلق لـ classpath الحالي.
مثلاً: file:/D:/workspace/jbpmtest3/bin/
3 this.getClass().getClassLoader().getResource("")
المسار المكتسب هو مسار URI المطلق لـ ClassPath الحالي.
مثلاً: file:/D:/workspace/jbpmtest3/bin/
4 ClassLoader.getSystemResource("")
المسار المكتسب هو مسار URI المطلق لـ ClassPath الحالي.
مثلاً: file:/D:/workspace/jbpmtest3/bin/
5 Thread.currentThread().getContextClassLoader().getResource("")
المسار المكتسب هو مسار URI المطلق لـ ClassPath الحالي.
مثلاً: file:/D:/workspace/jbpmtest3/bin/
6 ServletActionContext.getServletContext().getRealPath("/")
في تطبيقات الويب، الحصول على مسار الدليل الأساسي للتطبيق الويب. بهذا، يمكننا تقديم مسار يتعلق بدليل الجذر للتطبيق الويب فقط لإنشاء مسار مطلق لل موارد.
مثل: 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. لا تستخدم المسارات المطلقة. يمكن استخدام طريقة getExtendResource (String relativePath) من كلاسClassLoaderUtil للعثور على الموارد الموجودة في المسارات التي تتناسب مع classpath.
4. لا تستخدم المسارات الاسمية المطلقة أبداً. لأننا يمكننا تماماً الحصول على المسار المطلق الحالي للمسار الكلاسيكي باستخدام طريقة getResource(""). من الممكن أيضًا تحديد مسار مطلق إذا كنت مضطراً إليه، ولكن استخدامه في ملف التكوين هو أفضل بكثير من استخدام الكود المكتوب يدويًا!
طرق الحصول على مسارات خارج 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 في Java
لا شيء آخر يمكن أن يقول، سأقدم لك الشيفرة الرئيسية مباشرة، كما يلي:
<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>
ما تم ذكره أعلاه هو كود بسيط لتحديد مسار classpath في جافا، آمل أن يكون هذا مفيدًا لكم، إذا كان لديكم أي أسئلة، فلا تترددوا في ترك تعليق، وسأقوم بالرد على أسئلتكم في أقرب وقت ممكن!
بيان: محتوى هذا المقال تم جمعه من الإنترنت، وله حقوق الملكية للمالك الأصلي، تم جمعه من قبل المستخدمين عبر الإنترنت بشكل متعاوني وتم تحميله بشكل مستقل، لا يمتلك هذا الموقع حقوق الملكية، لم يتم تعديل المحتوى بشكل يدوي، ولا يتحمل الموقع أي مسؤولية قانونية متعلقة بذلك. إذا رأيت محتوى يشتبه في انتهاك حقوق النسخ، فلا تتردد في إرسال بريد إلكتروني إلى: notice#oldtoolbag.com (عند إرسال البريد الإلكتروني، يرجى استبدال # بـ @) لإبلاغنا، وقدم الدليل على ذلك، إذا تم التحقق من ذلك، سيتم حذف المحتوى المزعوم فورًا.