English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
ClassLoader bietet zwei Methoden, um Ressourcen aus dem geladenen Classpath zu erhalten:
public URL getResource (String name); public InputStream getResourceAsStream (String name);
Hier ist name der Pfad der Ressource im Classpath, der relativ zu "/"Basispfad". getResource gibt ein URL-Objekt zurück, um Ressourcen zu lokalisieren, und getResourceAsStream erhält den Verweis auf den Eingabestrom der Ressource, um sicherzustellen, dass das Programm Daten von der richtigen Position extrahieren kann.
Doch die tatsächlich verwendeten Methoden sind nicht diese beiden von ClassLoader, sondern die getResource und getResourceAsStream Methoden von Class, da der Class-Objekt von deiner Klasse erhalten werden kann (wie YourClass.class oder YourClass.getClass()), und ClassLoader benötigt wird, um noch einmal YourClass.getClassLoader() aufzurufen, obwohl laut JDK-Dokument diese beiden Methoden des Class-Objekts in der Tat 'delegiert' (delegated) an den ClassLoader, der es lädt, sind, sodass nur diese beiden Methoden des Class-Objekts verwendet werden müssen.
Daher wird direkt this.getClass().getResourceAsStream(String name); zum Streamen aufgerufen, im statischen Verfahren wird ClassLoader.getSystemResourceAsStream(String name); verwendet.
Hier sind einige Methoden, um den absoluten Pfad von Classpath und der aktuellen Klasse zu erhalten. Sie könnten einige dieser Methoden benötigen, um den absoluten Pfad der benötigten Ressourcen zu erhalten.
1.this.getClass().getResource("")
Das Ergebnis ist der URI-Verzeichnis der aktuellen Klasse.class-Datei. Es enthält nicht sich selbst!
z.B.: file:/D:/workspace/jbpmtest3/bin/com/test/
2.this.getClass().getResource(""/")
Das Ergebnis ist der absolute URI-Pfad des aktuellen Classpath.
z.B.: file:/D:/workspace/jbpmtest3/bin/
3.this.getClass().getClassLoader().getResource("")
wird ebenfalls der absolute URI-Pfad des aktuellen Classpath zurückgegeben.
z.B.: file:/D:/workspace/jbpmtest3/bin/
4.ClassLoader.getSystemResource("")
wird ebenfalls der absolute URI-Pfad des aktuellen Classpath zurückgegeben.
z.B.: file:/D:/workspace/jbpmtest3/bin/
5.Thread.currentThread().getContextClassLoader().getResource("")
wird ebenfalls der absolute URI-Pfad des aktuellen Classpath zurückgegeben.
z.B.: file:/D:/workspace/jbpmtest3/bin/
6.ServletActionContext.getServletContext().getRealPath(“/)
Im Webanwendung, um den absoluten Pfad des Wurzelverzeichnisses der Webanwendung zu erhalten. Auf diese Weise müssen wir nur den Pfad relativ zum Wurzelverzeichnis der Webanwendung bereitstellen, um den absoluten Pfad der Ressourcenposition zu erstellen.
z.B.: file:/D:/workspace/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/WebProject
Beachtungspunkte:
1.Verwenden Sie so weit wie möglich relative Pfade im Verhältnis zum aktuellen Benutzerordner von System.getProperty("user.dir")。Das ist eine Zeitbombe, die jederzeit ausgelöst werden könnte und Sie das Leben kosten könnte.
2.Verwenden Sie so weit wie möglich absolute Pfade in URI-Form. Sie können leicht in URI, URL und File-Objekte umgewandelt werden.
3.Verwenden Sie so weit wie möglich relative Pfade im Verhältnis zum Classpath. Verwenden Sie keine absoluten Pfade. Mit dem Methodenaufruf public static URL getExtendResource(String relativePath)der Klasse ClassLoaderUtil können alle Ressourcen anhand relativer Pfade im Verhältnis zum Classpath lokalisiert werden.
4.Verwenden Sie niemals festgelegte absolute Pfade. Denn wir können die Methode getResource("")der Klasse ClassLoader verwenden, um den absoluten Pfad des aktuellen Classpath zu erhalten. Wenn Sie unbedingt einen absoluten Pfad angeben müssen, ist die Verwendung einer Konfigurationsdatei viel besser als die Verwendung von festgelegten Pfade!
Methode, um außerhalb des CLASSPATH-Pfades zu erhalten:
URL base = this.getClass().getResource(""); //zuerst den Standort dieser Klasse erhalten, z.B./home/popeye/testjava/build/classes/net/
String path = new File(base.getFile(), "……/……/……/"+name).getCanonicalPath(); //dann kann man bekommen/home/popeye/testjava/
Außerdem ist es ungewöhnlich, wenn von ANT gestartet wird, this.getClass().getResource(
Lassen Sie uns nun sehen, wie man in Java den Classpath classpath erhält.
Es gibt viel zu sagen, aber ich werde einfach den wichtigsten Code hinzufügen, wie folgt:
<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(" 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>
Die oben genannten einfachen Code-Methoden, um den Classpath in Java zu erhalten, die von mir vorgestellt wurden, hoffe ich, helfen Ihnen weiter. Wenn Sie Fragen haben, sind Sie herzlich eingeladen, mir eine Nachricht zu hinterlassen, ich werde umgehend antworten!
Erklärung: Der Inhalt dieses Artikels wurde aus dem Internet übernommen und gehört dem jeweiligen Urheber. Der Inhalt wurde von Internetnutzern freiwillig beigesteuert und hochgeladen. Diese Website besitzt keine Eigentumsrechte und hat den Inhalt nicht manuell bearbeitet. Sie übernimmt daher keine rechtlichen Verantwortlichkeiten. Falls Sie verdächtige Urheberrechtsinhalte finden, sind Sie herzlich eingeladen, eine E-Mail an notice#w zu senden.3Erklärung: Der Inhalt dieses Artikels wurde aus dem Internet übernommen und gehört dem jeweiligen Urheber. Der Inhalt wurde von Internetnutzern freiwillig beigesteuert und hochgeladen. Diese Website besitzt keine Eigentumsrechte und hat den Inhalt nicht manuell bearbeitet. Sie übernimmt daher keine rechtlichen Verantwortlichkeiten. Falls Sie verdächtige Urheberrechtsinhalte finden, sind Sie herzlich eingeladen, eine E-Mail an notice#w zu senden.