ClassLoader предоставляет два метода для получения ресурсов из загруженного класса:
Public URL GetResource (название строки); public inputstream getResourCeasStream (String name);
Здесь имя - это классная дорожка ресурса, который относительно корневого пути «/». GetResource получает объект URL для поиска ресурса, а GetResourCeasStream получает ссылку на поток ввода ресурса, чтобы убедиться, что программа может извлечь данные из правильного местоположения.
Но мы действительно используем не методы загрузки класса, а методы GetResource и GetResourCeasStream, потому что объект класса можно получить из вашего класса (например, yourclass.class или yourclass.getClass ()), а класс загрузчик должен вызвать свой метод. GetClassLoader (). Однако, согласно документации JDK, эти два метода объекта класса на самом деле «делегируют» классовой загрузке, который загружает его, поэтому вам нужно использовать только эти два метода объекта класса.
Следовательно, напрямую вызовите это.getClass (). GetResourCeasStream (String name), чтобы получить потоку, и используйте ClassLoader.getSySteMresourCeasStream (String name) в статическом методе.
Вот несколько способов получить путь к классу и абсолютный путь к текущему классу. Возможно, вам потребуется использовать некоторые из этих методов, чтобы получить абсолютный путь к необходимым вам ресурсам.
1. This.getClass (). GetResource ("" ")
То, что вы получаете, - это каталог URI текущего файла класса. Не включать себя!
Например: File:/d:/workspace/jbpmtest3/bin/com/test/
2. This.getClass (). GetResource ("/")
То, что вы получаете, является абсолютным путем URI нынешней группы класса.
Например: File:/d:/workspace/jbpmtest3/bin/
3. This.getClass () .getClassloader (). GetResource ("")
То, что вы получаете, также является абсолютным путем URI текущей трассы класса.
Например: File:/d:/workspace/jbpmtest3/bin/
4.classloader.getSystemresource ("" ")
То, что вы получаете, также является абсолютным путем URI текущей трассы класса.
Например: File:/d:/workspace/jbpmtest3/bin/
5.thread.currentthread (). GetContextClassloader (). GetResource ("")
То, что вы получаете, также является абсолютным путем URI текущей трассы класса.
Например: 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, объекты файлов.
3. Постарайтесь использовать относительные пути к классу. Не используйте абсолютные пути. Используя метод публичного статического URL GetExtenDresource (String RelativePath) класса класса загрузки выше, вы уже можете найти ресурсы во всех местах, используя относительный путь относительно группы класса.
4. Абсолютно не используйте абсолютные пути с твердыми кодировками. Потому что мы можем использовать метод GetReSource ("") класса класса, чтобы получить абсолютный путь текущего класса. Если вам нужно указать абсолютный путь, то использование файлов конфигурации также намного лучше, чем жестко кодируется!
Как пройти путь за пределы трассы:
URL -база = this.getClass (). GetResource (""); // сначала получите местоположение этого класса, например,/home/popeye/testjava/build/classes/net/net/
String path = new File (base.getFile (), "…/…/…/…/”+name) .getCanonicalPath (); // вы можете получить/home/popeye/testjava/name
Кроме того, если вы запустите программу с Ant, извлечен из этого. 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 ClassPath в Java, представленный вам редактором. Я надеюсь, что это будет полезно для вас. Если у вас есть какие -либо вопросы, пожалуйста, оставьте мне сообщение. Редактор ответит вам вовремя!