Wie zu Lesen ein Verzeichnis aus dem runtime classpath?
Meine Java-Anwendung muss in der Lage sein zu finden, eine myconfig/
Verzeichnis, das gebündelt in dem selben JAR:
myjar.jar/
com/
me/
myproject/
ConfigLoader.java --> looks for myconfig/ directory and its contents
myconfig/
conf-1.xml
conf.properties
... etc.
Wie kann ich eigentlich gehen über das Lesen dieser myconfig/
Verzeichnis aus dem runtime classpath? Ich habe einige der Forschung getan, und es scheint, dass die normale Methode des Lesens einer Datei aus dem classpath funktioniert nicht für Verzeichnisse:
InputStream stream = ConfigLoader.class.getResourceAsStream("myconfig");
Also weiß wer, wie zu Lesen, ein ganzes Verzeichnis aus dem runtime classpath befinden (im Gegensatz zu einer einzelnen Datei)? Vielen Dank im Voraus!
Bitte beachten Sie: Es ist nicht möglich, laden Sie die Dateien einzeln myconfig
ist ein Verzeichnis mit tausenden von properties-Dateien drin.
- Was versuchen Sie zu tun?
- Ich versuche zu vereinfachen, das problem für den Willen zu erklären, es. Es gibt eine Bibliothek namens
langdetect
gehostet auf google hier. Die Bibliothek wird mit einemprofiles
Verzeichnis, das verwendet wird, um laden jede einzelne Sprache properties-Datei in das runtime-classpath. Zur Laufzeit müssen Sie rufen Sie einenDetectFactory.loadProfile(String)
Methode zum initialisieren derprofiles/
- Verzeichnis. Also dieses Verzeichnis muss auf dem Klassenpfad. Ich kann diese arbeiten, wenn ich pass es ein abs Datei-Pfad, aber letztlich müssen Paket in dem selben JAR. - Also, letztlich, ich brauche nur pass
DetectFactory.loadProfiles
eine Zeichenfolge, die Punkte, die es zu derprofiles
Verzeichnis in dem selben JAR. Also in der Erwägung, dass mein Beispiel zeigtmyconfig
Verzeichnis, seine wirklichprofiles
. Wo es zeigtConfigLoader
, die wirklichDetectFactory
.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie die
PathMatchingResourcePatternResolver
zur Verfügung gestellt von Frühling.Habe ich nicht etwas Phantasie mit der Rückgabe der
Resource
aber Sie erhalten das Bild.Fügen Sie diese zu Ihrem maven-dependency (bei Verwendung von maven):
Könnten Sie nennen
ClassLoader.getResource()
zu finden, die eine bestimmte Datei in ein Verzeichnis (oder das Verzeichnis selbst, wenngetResource()
zurück-Verzeichnisse).getResource()
gibt eine URL auf das Ergebnis. Sie können dann konvertieren Sie diese URL in welcher form auch immer-die andere Bibliothek benötigt.getResource()
Methode hat in der Tat die Rückkehr Verzeichnisse.Der trick scheint zu sein, dass der class-loader finden kann, die Verzeichnisse im classpath, während die Klasse nicht.
Damit dies funktioniert
während dieses nicht