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 можно получить из вашего класса (например, YourClass.class или YourClass.getClass()), а ClassLoader требует дополнительного вызова метода YourClass.getClassLoader(), хотя, согласно документации JDK, эти два метода объекта Class其实是 «поручены» (delegate) для выполнения его ClassLoader, поэтому достаточно использовать эти два метода объекта Class.
Таким образом, напрямую вызывайте this.getClass().getResourceAsStream(String name); для получения потока, в статических методах используйте ClassLoader.getSystemResourceAsStream(String name); .
Ниже приведены一些 методы для получения абсолютных путей к classpath и текущему классу. Вы можете использовать некоторые из этих методов для получения абсолютного пути к所需要的 ресурсам.
1.this.getClass().getResource("")
Полученный является URI-каталогом текущего файла класса. Не включает себя!
Например: 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. Не используйте абсолютные пути. Метод public static URL getExtendResource(String relativePath) класса ClassLoaderUtil уже позволяет определять все ресурсы по относительным путям по отношению к classpath.
4. Абсолютно не используйте фиксированные абсолютные пути. Потому что мы完全可以 использовать метод getResource(""), класса ClassLoader, чтобы получить абсолютный путь текущего 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, результат этого.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 в Java,介绍的由编辑 для всех, если у вас есть какие-либо вопросы, пожалуйста, оставьте комментарий, редактор ответит вам в ближайшее время!
Заявление: данное содержимое получено из Интернета, авторские права принадлежат соответствующему автору. Содержимое предоставлено пользователями Интернета, самостоятельно загружено, сайт не имеет права собственности, не underwent редактирование, и не несет ответственности за связанные с этим юридические вопросы. Если вы обнаружите содержимое,涉嫌侵犯版权, пожалуйста, отправьте письмо по адресу: notice#oldtoolbag.com (во время отправки письма, пожалуйста, замените # на @) для сообщения о нарушении, и предоставьте соответствующие доказательства. В случае подтверждения, сайт немедленно удаляет涉嫌侵权的内容。