Tuve problemas con el uso del método getClass().getResource("filename.txt")
. Al leer las instrucciones de documentación de Java, si su recurso no está en el mismo paquete que la clase a la que intenta acceder, debe darle una ruta relativa que comienza con '/'
. La estrategia recomendada es colocar los archivos de recursos en una carpeta de "recursos" en el directorio raíz.Así por ejemplo, si usted tiene la estructura:
src/main/com/mycompany/myapp
continuación, puede agregar una carpeta de recursos según lo recomendado por el experto en:
src/main/resources
, además, se puede añadir subcarpetas en la carpeta de recursos
src/main/resources/textfiles
y diga que su archivo se llama myfile.txt
por lo que tiene
src/main/resources/textfiles/myfile.txt
Ahora aquí es donde entra el estúpido problema de ruta. Digamos que tiene una clase en su com.mycompany.myapp package
, y desea acceder al archivo myfile.txt
desde su carpeta de recursos. Algunos dicen que necesita para dar el:
"/main/resources/textfiles/myfile.txt" path
o
"/resources/textfiles/myfile.txt"
ambos están equivocados. Después me encontré mvn clean compile
, los archivos y las carpetas se copian en el:
myapp/target/classes
carpeta. Pero la carpeta de recursos no está allí, solo las carpetas en la carpeta de recursos. Por lo que tiene:
myapp/target/classes/textfiles/myfile.txt
myapp/target/classes/com/mycompany/myapp/*
por lo que el camino correcto para dar con el método getClass().getResource("")
es:
"/textfiles/myfile.txt"
aquí está:
getClass().getResource("/textfiles/myfile.txt")
Esto ya no volverá nula, pero lo hará devuelve tu clase Espero que esto ayude a alguien. Es extraño para mí que la carpeta "resources"
no se copie también, sino solo las subcarpetas y los archivos directamente en la carpeta "resources"
. Parecería lógico que la carpeta "resources"
también se encuentra bajo "myapp/target/classes"
class.getClass() no es lo mismo que class.getClassLoader(). También hay otra solución, getResourceAsStream() que usa una clase en el mismo paquete que su recurso. Para más detalles: http://tshikatshikaaa.blogspot.nl/2012/07/maven-how-to-access-filesdata-in.html. – JVerstry
Véase también http://stackoverflow.com/questions/204784/how-to-construct-a-relative-path-in-java-from-two-absolute-paths-or-urls – Vadzim