Ich hatte Probleme mit der getClass().getResource("filename.txt")
Methode. Wenn sich Ihre Ressource beim Lesen der Java-Dokumentanweisungen nicht im selben Paket befindet wie die Klasse, von der aus Sie auf die Ressource zugreifen möchten, müssen Sie ihr einen relativen Pfad geben, beginnend mit '/'
. Die empfohlene Strategie besteht darin, Ihre Ressourcendateien in einem Ordner "resources" im Stammverzeichnis abzulegen. Also zum Beispiel, wenn Sie die Struktur haben:
src/main/com/mycompany/myapp
Anschließend können Sie einen Ressourcenordner hinzufügen, wie von maven empfohlen in:
src/main/resources
Außerdem können Sie Unterordner zum Ressourcenordner hinzufügen
src/main/resources/textfiles
und sagen Sie, dass Ihre Datei aufgerufen wird, myfile.txt
damit Sie haben
src/main/resources/textfiles/myfile.txt
Hier kommt nun das dumme Pfadproblem ins Spiel. Angenommen, Sie haben eine Klasse in Ihrem com.mycompany.myapp package
und möchten myfile.txt
von Ihrem Ressourcenordner aus auf die Datei zugreifen . Einige sagen, Sie müssen geben:
"/main/resources/textfiles/myfile.txt" path
oder
"/resources/textfiles/myfile.txt"
beide sind falsch. Nach mvn clean compile
dem Ausführen werden die Dateien und Ordner in folgende Dateien kopiert:
myapp/target/classes
Ordner. Der Ressourcenordner ist jedoch nicht vorhanden, sondern nur die Ordner im Ressourcenordner. Also hast du:
myapp/target/classes/textfiles/myfile.txt
myapp/target/classes/com/mycompany/myapp/*
Der richtige Pfad für die getClass().getResource("")
Methode lautet also:
"/textfiles/myfile.txt"
hier ist es:
getClass().getResource("/textfiles/myfile.txt")
Dies gibt nicht mehr null zurück, sondern Ihre Klasse. Ich hoffe das hilft jemandem. Es ist seltsam für mich, dass der "resources"
Ordner nicht ebenfalls kopiert wird, sondern nur die Unterordner und Dateien direkt im "resources"
Ordner. Es erscheint mir logisch, dass sich der "resources"
Ordner auch unter befindet"myapp/target/classes"