Tuve problemas con el uso del getClass().getResource("filename.txt")
método. Al leer las instrucciones de los documentos de Java, si su recurso no está en el mismo paquete que la clase desde la que está tratando de acceder al recurso, entonces debe darle una ruta relativa que comience con '/'
. La estrategia recomendada es colocar sus archivos de recursos en una carpeta de "recursos" en el directorio raíz. Entonces, por ejemplo, si tiene la estructura:
src/main/com/mycompany/myapp
luego puede agregar una carpeta de recursos según lo recomendado por maven en:
src/main/resources
además, puede agregar subcarpetas en la carpeta de recursos
src/main/resources/textfiles
y decir que su archivo se llama myfile.txt
para que tenga
src/main/resources/textfiles/myfile.txt
Aquí es donde entra en juego el estúpido problema de la ruta. Digamos que tiene una clase en su com.mycompany.myapp package
y desea acceder al myfile.txt
archivo desde su carpeta de recursos. Algunos dicen que necesitas dar el:
"/main/resources/textfiles/myfile.txt" path
o
"/resources/textfiles/myfile.txt"
ambos están equivocados. Después de ejecutar mvn clean compile
, los archivos y carpetas se copian en:
myapp/target/classes
carpeta. Pero la carpeta de recursos no está allí, solo las carpetas en la carpeta de recursos. Así que tienes:
myapp/target/classes/textfiles/myfile.txt
myapp/target/classes/com/mycompany/myapp
entonces la ruta correcta para darle al getClass().getResource("")
método es:
"/textfiles/myfile.txt"
aquí está:
getClass().getResource("/textfiles/myfile.txt")
Esto ya no devolverá nulo, pero devolverá su clase. Espero que esto ayude a alguien. Me resulta extraño que la "resources"
carpeta no se copie también, sino solo las subcarpetas y los archivos directamente en la "resources"
carpeta. Me parece lógico que la "resources"
carpeta también se encuentre en"myapp/target/classes"