Ho avuto problemi con l'utilizzo del getClass().getResource("filename.txt")
metodo. Dopo aver letto le istruzioni della documentazione Java, se la tua risorsa non si trova nello stesso pacchetto della classe dalla quale stai tentando di accedere alla risorsa, devi dargli il percorso relativo che inizia con '/'
. La strategia consigliata consiste nell'inserire i file di risorse in una cartella "risorse" nella directory principale. Quindi ad esempio se hai la struttura:
src/main/com/mycompany/myapp
quindi puoi aggiungere una cartella delle risorse come consigliato da Maven in:
src/main/resources
inoltre è possibile aggiungere sottocartelle nella cartella delle risorse
src/main/resources/textfiles
e dì che il tuo file si chiama myfile.txt
così hai
src/main/resources/textfiles/myfile.txt
Ora è qui che entra in gioco lo stupido problema del percorso. Supponi di avere una classe nella tua com.mycompany.myapp package
e di voler accedere al myfile.txt
file dalla cartella delle risorse. Alcuni dicono che devi dare il:
"/main/resources/textfiles/myfile.txt" path
o
"/resources/textfiles/myfile.txt"
entrambi questi sono sbagliati. Dopo aver eseguito 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. Quindi hai:
myapp/target/classes/textfiles/myfile.txt
myapp/target/classes/com/mycompany/myapp
quindi il percorso corretto da dare al getClass().getResource("")
metodo è:
"/textfiles/myfile.txt"
Ecco qui:
getClass().getResource("/textfiles/myfile.txt")
Questo non restituirà più null, ma restituirà la tua classe. Spero che questo aiuti qualcuno. È strano per me, che la "resources"
cartella non venga copiata anche, ma solo le sottocartelle ei file direttamente nella "resources"
cartella. Mi sembrerebbe logico che la "resources"
cartella si trovasse anche sotto"myapp/target/classes"