English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
ClassLoader proporciona dos métodos para obtener recursos del classpath que carga:
public URL getResource (String name); public InputStream getResourceAsStream (String name);
Aquí name es la ruta del classpath del recurso, que es relativa a "/"ubicación en la raíz del directorio. getResource devuelve un objeto URL para localizar el recurso, mientras que getResourceAsStream obtiene la referencia al flujo del recurso para asegurar que el programa pueda extraer datos desde la posición correcta.
Sin embargo, los métodos realmente utilizados no son los dos de ClassLoader, sino los métodos getResource y getResourceAsStream de Class, porque el objeto Class puede obtenerse de su clase (como YourClass.class o YourClass.getClass()), mientras que ClassLoader necesita llamar una vez más al método YourClass.getClassLoader(), aunque según la documentación de JDK, estos dos métodos del objeto Class son en realidad "delegados" (delegate) a su ClassLoader, por lo que solo se necesitan estos dos métodos del objeto Class.
Por lo tanto, es suficiente llamar directamente this.getClass().getResourceAsStream(String name); para obtener el flujo, mientras que en métodos estáticos se utiliza ClassLoader.getSystemResourceAsStream(String name); .
A continuación se presentan algunos métodos para obtener la ruta absoluta del classpath y de la clase actual. Puede que necesite utilizar alguno de estos métodos para obtener la ruta absoluta del recurso necesario.
1.this.getClass().getResource("")
Se obtiene la URI del directorio del archivo class de la clase actual. ¡No incluye a sí mismo!
Por ejemplo: file:/D:/workspace/jbpmtest3/bin/com/test/
2.this.getClass().getResource(""/")
Se obtiene la ruta URI absoluta del classpath actual.
Por ejemplo: file:/D:/workspace/jbpmtest3/bin/
3.this.getClass().getClassLoader().getResource("")
Lo obtenido también es la ruta absoluta URI del currentClassPath.
Por ejemplo: file:/D:/workspace/jbpmtest3/bin/
4.ClassLoader.getSystemResource("")
Lo obtenido también es la ruta absoluta URI del currentClassPath.
Por ejemplo: file:/D:/workspace/jbpmtest3/bin/
5.Thread.currentThread().getContextClassLoader().getResource("")
Lo obtenido también es la ruta absoluta URI del currentClassPath.
Por ejemplo: file:/D:/workspace/jbpmtest3/bin/
6.ServletActionContext.getServletContext().getRealPath(“/)
En aplicaciones web, obtener la ruta absoluta del directorio raíz de la aplicación web. De esta manera, solo necesitamos proporcionar la ruta relativa al directorio raíz de la aplicación web para construir la ruta absoluta de ubicación de recursos.
Por ejemplo: file:/D:/workspace/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/WebProject
Puntos a tener en cuenta:
1.Trate de no usar rutas relativas al directorio actual del usuario System.getProperty("user.dir"). Es una bomba de tiempo, que puede costarte la vida en cualquier momento.
2.Trate de usar recursos de rutas absolutas en forma de URI. Puede convertirse fácilmente en URI, URL, objeto File.
3.Trate de usar rutas relativas al CLASSPATH. No utilice rutas absolutas. El método public static URL getExtendResource(String relativePath)de la clase ClassLoaderUtil ya puede usar rutas relativas al CLASSPATH para ubicar todos los recursos.
4.No utilice rutas absolutas en código duro. Porque, podemos usar el método getResource("")de la clase ClassLoader para obtener la ruta absoluta del currentclasspath. Si realmente necesita especificar una ruta absoluta, ¡es mucho mejor usar un archivo de configuración que el código en código duro!
Métodos para obtener rutas fuera de CLASSPATH:
URL base = this.getClass().getResource(""); //primero obtener la ubicación de esta clase, como/home/popeye/testjava/build/classes/net/
String path = new File(base.getFile(), "……/……/……/"+name).getCanonicalPath(); //se puede obtener/home/popeye/testjava/
Además, si se inicia el programa desde ANT, this.getClass().getResource(
Ahora veamos los métodos de obtención de la clase de la ruta classpath en Java
No quiero hablar más tonterías, aquí les dejo el código clave, como se muestra a continuación:
<span style="font-tamaño: 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(" 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>
Los métodos simples de obtención de la clase de la ruta classpath en Java que el editor le ha presentado a todos, espero que les sea útil. Si tienen alguna pregunta, déjenme un mensaje y el editor les responderá a tiempo!
Aviso: El contenido de este artículo se ha obtenido de la red, pertenece al autor original, el contenido ha sido contribuido y subido por los usuarios de Internet, este sitio web no posee los derechos de propiedad, no ha sido editado por humanos y no asume ninguna responsabilidad legal relacionada. Si encuentra contenido sospechoso de infracción de derechos de autor, por favor envíe un correo electrónico a: notice#w proporcionando la evidencia relevante, una vez que se verifique, este sitio eliminará inmediatamente el contenido sospechoso de infracción.3Declaración: El contenido de este artículo se ha obtenido de la red, pertenece al autor original, el contenido ha sido contribuido y subido por los usuarios de Internet, este sitio web no posee los derechos de propiedad, no ha sido editado por humanos y no asume ninguna responsabilidad legal relacionada. Si encuentra contenido sospechoso de infracción de derechos de autor, por favor envíe un correo electrónico a: notice#w proporcionando la evidencia relevante, una vez que se verifique, este sitio eliminará inmediatamente el contenido sospechoso de infracción.