Classloader bietet zwei Methoden zum Erhalten von Ressourcen aus dem geladenen Klassenpfad:
öffentliche URL GetResource (String -Name); public InputStream getResourceAsStream (String -Name);
Hier ist der Name der Klassenpfad der Ressource, der relativ zum "/" -Sichtweite ist. GetResource erhält ein URL -Objekt, um die Ressource zu lokalisieren, und GetResourceAsStream erhält den Verweis auf den Ressourceneingangsstrom, um sicherzustellen, dass das Programm Daten vom richtigen Ort extrahieren kann.
Aber was wir wirklich verwenden, sind nicht die Klassenloader -Methoden, sondern die GetResource- und GetResourceAsStream -Methoden der Klasse, da das Klassenobjekt aus Ihrer Klasse (z. B. YourClass.Class oder YourClass.getClass ()) erhalten werden kann, und der Klassenloader muss YourClass.getClassLoader () -Methode erneut anrufen. Nach der JDK -Dokumentation sind diese beiden Methoden des Klassenobjekts jedoch tatsächlich "delegieren" an den Klassenloader, der es lädt, sodass Sie diese beiden Methoden des Klassenobjekts nur anwenden müssen.
Daher nennen Sie dies direkt diese.
Hier sind einige Möglichkeiten, um den Klassenpfad und den absoluten Weg zur aktuellen Klasse zu erreichen. Möglicherweise müssen Sie einige dieser Methoden anwenden, um den absoluten Weg zu den Ressourcen zu erhalten, die Sie benötigen.
1.Dis.getClass (). GetResource ("")
Was Sie erhalten, ist das URI -Verzeichnis der aktuellen Klassendatei. Nicht selbst einbeziehen!
Zum Beispiel: Datei:/d:/Workspace/jbpmtest3/bin/com/test/
2.Dis.getClass (). GetResource ("/")
Was Sie bekommen, ist der absolute URI -Pfad des aktuellen Klassenpfads.
Zum Beispiel: Datei:/d:/Workspace/jbpmtest3/bin/
3.Dis.getClass () .GetClassloader (). GetResource ("")
Was Sie erhalten, ist auch der absolute URI -Pfad des aktuellen Klassenpfads.
Zum Beispiel: Datei:/d:/Workspace/jbpmtest3/bin/
4. Classloader.getSystemResource ("")
Was Sie erhalten, ist auch der absolute URI -Pfad des aktuellen Klassenpfads.
Zum Beispiel: Datei:/d:/Workspace/jbpmtest3/bin/
5.Thread.CurrentThread (). GetContextClassloader (). GetResource ("")
Was Sie erhalten, ist auch der absolute URI -Pfad des aktuellen Klassenpfads.
Zum Beispiel: Datei:/d:/Workspace/jbpmtest3/bin/
6.ServletActionContext.getServletContext (). GetRealPath ("/")
Holen Sie sich in einer Webanwendung den absoluten Pfad zum Stammverzeichnis der Webanwendung. Auf diese Weise müssen wir nur einen Pfad relativ zum Stammverzeichnis der Webanwendung bereitstellen, um einen absoluten Weg zur Lokalisierung von Ressourcen zu erstellen.
Zum Beispiel: Datei: /d:/workspace/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/webproject
Notiz:
1. Versuchen Sie nicht, den relativen Pfad relativ zu System.getProperty ("user.dir") aktuellem Benutzerverzeichnis zu verwenden. Dies ist eine Zeitbombe, die Sie jederzeit töten kann.
2. Versuchen Sie, absolute Pfadressourcen in Form von URI zu verwenden. Es kann leicht in URI-, URL-, Dateiobjekte umgewandelt werden.
3. Versuchen Sie, relative Klassenpfade zu verwenden. Verwenden Sie keine absoluten Pfade. Unter Verwendung der öffentlichen statischen URL -GetExtendResource -Methode (String RelativePath) der oben genannten Klasse -Loaderutil -Klasse können Sie bereits Ressourcen an allen Standorten unter Verwendung des relativen Pfades relativ zum Klassenpfad lokalisieren.
4. Verwenden Sie absolut keine hartcodierten absoluten Pfade. Denn wir können die GetResource ("") -Methode der Classloader -Klasse verwenden, um den absoluten Pfad des aktuellen Klassenpfads zu erhalten. Wenn Sie einen absoluten Pfad angeben müssen, ist die Verwendung von Konfigurationsdateien auch viel besser als hartcodiert!
Wie man einen Weg außerhalb des Klassenpfades bekommt:
Url base = this.getClass (). GetResource (""); // Erhalten Sie zuerst den Standort dieser Klasse, z.
String path = new Datei (Base.getFile (), "…/…/…/…/”+name) .getCanonicalPath (); // Sie können/home/popeye/testjava/name bekommen
Wenn Sie das Programm von ANT starten, haben die von diesem abgerufenen .GetClass (). GetResource ("" ist ziemlich seltsam, und Sie können es erfolgreich mit der Java -Befehlszeile debuggen.
Schauen wir uns die Methode an, um den Klassenklassenklassenpfad in Java zu erhalten
Ich habe viel mehr gesagt, also werde ich Ihnen den Schlüsselcode direkt veröffentlichen. Der spezifische Code lautet wie folgt:
<span style = "font-size: 18px;"> system.out.println ("++++++++++++++++++++++++++++++"); String Path = System.getProperty ("java.class.path"); String Path2 = String Path2 = system = system.getProperty ("java.class.path"); String path2 = FreemarkerWriter.Class.getProtectionDomain (). Thread.currentThread (). GetContextClassloader (). GetResource (""). GetPath (); System.out.println ("Pfad 1" + Pfad); System.out.println ("Path 2 =" + Path2); Path4); System.out.println ("++++++++++++++++++++++++++++++");Das obige ist der einfache Code der Methode, um den Klassenpath -Klassenpfad in Java zu erhalten, der Ihnen vom Herausgeber vorgestellt wurde. Ich hoffe, es wird Ihnen hilfreich sein. Wenn Sie Fragen haben, hinterlassen Sie mir bitte eine Nachricht. Der Herausgeber wird Ihnen rechtzeitig antworten!