Ho avuto problemi con l'utilizzo del metodo getClass().getResource("filename.txt")
. Leggendo le istruzioni dei documenti Java, se la tua risorsa non si trova nello stesso pacchetto della classe a cui stai tentando di accedere alla risorsa, devi dargli il percorso relativo che inizia con '/'
. La strategia raccomandata consiste nel mettere i file delle risorse in una cartella "risorse" nella directory principale.Così, per esempio, se si ha la struttura:
src/main/com/mycompany/myapp
quindi è possibile aggiungere una cartella di risorse come raccomandato da Maven in:
src/main/resources
, inoltre, è possibile aggiungere sottocartelle nella cartella risorse
src/main/resources/textfiles
e dite che il vostro file si chiama myfile.txt
quindi avete
src/main/resources/textfiles/myfile.txt
Ora è qui che entra in gioco lo stupido problema. Dì che hai una classe nel tuo com.mycompany.myapp package
e vuoi accedere al file myfile.txt
dalla tua cartella delle risorse. Alcuni dicono che è necessario dare il:
"/main/resources/textfiles/myfile.txt" path
o
"/resources/textfiles/myfile.txt"
entrambi questi sono sbagliato. Dopo mi sono imbattuto mvn clean compile
, i file e le cartelle vengono copiati in:
myapp/target/classes
cartella. Ma la cartella delle risorse non è lì, solo le cartelle nella cartella delle risorse. In modo da avere:
myapp/target/classes/textfiles/myfile.txt
myapp/target/classes/com/mycompany/myapp/*
in modo che il percorso corretto che invia al metodo getClass().getResource("")
è:
"/textfiles/myfile.txt"
qui è:
getClass().getResource("/textfiles/myfile.txt")
Questo non sarà più tornare null, ma sarà ritorna la tua classe. Spero che questo aiuti qualcuno. È strano per me che la cartella "resources"
non venga copiata, ma solo le sottocartelle e i file direttamente nella cartella "resources"
. Sembrerebbe logico per me che la cartella "resources"
sarebbe anche trovato sotto "myapp/target/classes"
class.getClass() non è la stessa di class.getClassLoader(). Esiste anche un'altra soluzione, getResourceAsStream() che utilizza una classe nello stesso pacchetto della risorsa. Per maggiori dettagli: http://tshikatshikaaa.blogspot.nl/2012/07/maven-how-to-access-filesdata-in.html. – JVerstry
Vedere anche http://stackoverflow.com/questions/204784/how-to-construct-a-relative-path-in-java-from-two-absolute-paths-or-slors – Vadzim