English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
ClassLoader fornisce due metodi per ottenere risorse dal percorso della classe caricato:
public URL getResource (String name); public InputStream getResourceAsStream (String name);
Ecco che il nome 'name' è il percorso della risorsa della classe, che è la posizione relativa al percorso radice '/' di base. L'oggetto URL ottenuto da getResource viene utilizzato per localizzare la risorsa, mentre getResourceAsStream fornisce il riferimento allo stream di input della risorsa per garantire che il programma possa estrarre i dati dalla posizione corretta.
Ma non sono questi due metodi di ClassLoader quelli veramente utilizzati, ma i metodi getResource e getResourceAsStream della classe, perché l'oggetto Class può essere ottenuto dalla tua classe (ad esempio YourClass.class o YourClass.getClass()), mentre il ClassLoader richiede di chiamare nuovamente il metodo YourClass.getClassLoader(), tuttavia secondo la documentazione JDK, questi due metodi dell'oggetto Class sono in realtà 'delegati' al ClassLoader che lo carica, quindi è sufficiente utilizzare questi due metodi dell'oggetto Class.
Quindi, chiamare direttamente this.getClass().getResourceAsStream(String name) per ottenere lo stream, e nell'uso statico del metodo utilizzare ClassLoader.getSystemResourceAsStream(String name) ; .
Di seguito sono riportati alcuni metodi per ottenere il percorso assoluto del classpath e della classe attuale. Potresti dover utilizzare uno di questi metodi per ottenere il percorso assoluto delle risorse necessarie.
1.this.getClass().getResource(""))
L'indirizzo del directory URI del file class della classe attuale è ottenuto. Esclude se stesso!
Ad esempio: file:/D:/workspace/jbpmtest3/bin/com/test/
2.this.getClass().getResource("/")
L'indirizzo URI assoluto del classpath attuale è ottenuto.
Ad esempio: file:/D:/workspace/jbpmtest3/bin/
3.this.getClass().getClassLoader().getResource(""))
L'indirizzo URI assoluto del ClassPath attuale è ottenuto anche.
Ad esempio: file:/D:/workspace/jbpmtest3/bin/
4.ClassLoader.getSystemResource(""))
L'indirizzo URI assoluto del ClassPath attuale è ottenuto anche.
Ad esempio: file:/D:/workspace/jbpmtest3/bin/
5.Thread.currentThread().getContextClassLoader().getResource(""))
L'indirizzo URI assoluto del ClassPath attuale è ottenuto anche.
Ad esempio: file:/D:/workspace/jbpmtest3/bin/
6.ServletActionContext.getServletContext().getRealPath("/")
Nella Web application, ottenere il percorso assoluto della directory radice della Web application. In questo modo, è sufficiente fornire un percorso relativo alla directory radice della Web application per costruire il percorso assoluto per localizzare le risorse.
Ad esempio: file:/D:/workspace/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/WebProject
Punti da notare:
1. Cerca di non utilizzare percorsi relativi al percorso corrente di System.getProperty("user.dir") del directory dell'utente. È una bomba a orologeria che potrebbe ucciderti in qualsiasi momento.
2. Cerca di utilizzare risorse di percorso assoluto nella forma URI. Può essere facilmente trasformato in URI, URL, oggetto File.
3. Cerca di utilizzare percorsi relativi al classpath. Non utilizzare percorsi assoluti. Il metodo public static URL getExtendResource(String relativePath) della classe ClassLoaderUtil può già utilizzare percorsi relativi al classpath per localizzare tutte le risorse.
4. Assolutamente non utilizzare percorsi assoluti codificati manualmente. Poiché possiamo ottenere il percorso assoluto del currentclasspath utilizzando il metodo getResource("" ) della classe ClassLoader. Se devi specificare un percorso assoluto, è molto meglio utilizzare un file di configurazione rispetto alla codifica manuale!
Metodi per ottenere percorsi al di fuori di CLASSPATH:
URL base = this.getClass().getResource(""); // ottiene la posizione del presente classe, come /home/popeye/testjava/build/classes/net/
String path = new File(base.getFile(), "……/……/……/"+name).getCanonicalPath(); // può ottenere /home/popeye/testjava/name
Inoltre, se si avvia il programma da ANT, l'output di this.getClass().getResource("") è strano, ma può funzionare correttamente con la debug di riga di comando JAVA.
Vediamo ora come ottenere il percorso della classe classpath in Java
Non c'è bisogno di più parole inutili, passerò direttamente al codice chiave, come segue:
<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>
Come descritto sopra, ecco un codice semplice per ottenere il classpath in Java, spero che sia utile a tutti voi. Se avete qualsiasi domanda, lasciate un commento e il curatore risponderà prontamente!
Dichiarazione: il contenuto di questo articolo è stato raccolto da Internet, di proprietà dei rispettivi autori, il contenuto è stato contribuito e caricato dagli utenti di Internet, il sito web non detiene i diritti di proprietà, non è stato elaborato manualmente e non assume alcuna responsabilità legale correlata. Se trovi contenuti sospetti di violazione del copyright, ti preghiamo di inviare una e-mail a: notice#oldtoolbag.com (al momento dell'invio dell'e-mail, sostituisci # con @) per segnalare il problema e fornire prove pertinenti. Una volta verificata, il sito Web rimuoverà immediatamente il contenuto sospetto di violazione del copyright.