Ich hatte Probleme mit der getClass().getResource("filename.txt")
Methode. Wenn Sie nach dem Lesen der Java-Dokumentationsanweisungen nicht in demselben Paket wie die Klasse, auf die Sie zugreifen möchten, von der Ressource zugreifen, müssen Sie einen relativen Pfad angeben, der mit '/'
beginnt. Die empfohlene Strategie besteht darin, Ihre Ressourcendateien in einem Ordner "Ressourcen" im Stammverzeichnis ablegen.Wenn Sie die Struktur So zum Beispiel haben:
src/main/com/mycompany/myapp
dann können Sie einen Ressourcen-Ordner hinzufügen, wie von Maven empfohlen in:
src/main/resources
außerdem können Sie Unterordner in den Ordner Ressourcen hinzufügen
src/main/resources/textfiles
und sagen, dass Ihre Datei heißt myfile.txt
, so haben Sie
src/main/resources/textfiles/myfile.txt
Jetzt ist hier, wo das Problem dummer Pfad kommt. Sagen Sie, Sie haben eine Klasse in Ihrem com.mycompany.myapp package
, und Sie möchten auf die myfile.txt
Datei aus Ihrem Ressourcenordner zugreifen. Einige sagen, dass Sie das geben:
"/main/resources/textfiles/myfile.txt" path
oder
"/resources/textfiles/myfile.txt"
beides falsch sind.
myapp/target/classes
Ordner: Nachdem ich mvn clean compile
lief, werden die Dateien und Ordner in die kopiert. Aber der Ressourcenordner ist nicht da, nur die Ordner im Ressourcenordner. Sie haben also:
myapp/target/classes/textfiles/myfile.txt
myapp/target/classes/com/mycompany/myapp/*
so der korrekte Pfad zum getClass().getResource("")
Methode zu geben:
"/textfiles/myfile.txt"
hier ist es:
getClass().getResource("/textfiles/myfile.txt")
Dies wird nicht mehr null zurück, wird aber Gib deine Klasse zurück. Ich hoffe, das hilft jemandem. Es ist seltsam für mich, dass der Ordner "resources"
nicht kopiert wird, sondern nur die Unterordner und Dateien direkt im Ordner "resources"
. Es scheint mir logisch, dass der "resources"
Ordner würde auch unter "myapp/target/classes"
class.getClass() ist nicht das gleiche wie class.getClassLoader(). Es gibt auch eine andere Lösung: getResourceAsStream() verwendet eine Klasse im selben Paket wie Ihre Ressource. Für weitere Details: http://tshikatshikaaa.blogspot.nl/2012/07/maven-how-to-access-filesdata-in.html. – JVerstry
Siehe auch http://stackoverflow.com/questions/204784/how-to-construct-a-relative-path-in-java-from-two-absolute-paths-orls – Vadzim