Tengo una carpeta / paquete de recursos en la raíz de mi proyecto, "no" quiero cargar un determinado archivo. ¡Si quisiera cargar un determinado archivo, usaría class.getResourceAsStream y estaría bien! Lo que realmente quiero hacer es cargar una "Carpeta" dentro de la carpeta de recursos, hacer un bucle en los Archivos dentro de esa Carpeta y obtener una Secuencia para cada archivo y leer en el contenido ... Suponga que los nombres de los Archivos no están determinados antes del tiempo de ejecución ... ¿Qué tengo que hacer? ¿Hay alguna manera de obtener una lista de los archivos dentro de una carpeta en su archivo jar? Observe que el archivo Jar con los recursos es el mismo archivo jar desde el que se ejecuta el código ...
Gracias por adelantado...
Respuestas:
Finalmente, encontré la solución:
El segundo bloque simplemente funciona cuando ejecuta la aplicación en IDE (no con el archivo jar). Puede eliminarlo si no le gusta.
fuente
Intenta lo siguiente.
Cree la ruta del recurso
"<PathRelativeToThisClassFile>/<ResourceDirectory>"
Por ejemplo, si su ruta de clase es com.abc.package.MyClass y sus archivos de recursos están dentro de src / com / abc / package / resources /:También puedes usar
fuente
File
clase. Este código no funciona con recursos dentro de un archivo JAR. Período.Sé que esto es hace muchos años. Pero solo para otras personas se encuentran con este tema. Lo que podría hacer es usar el
getResourceAsStream()
método con la ruta del directorio, y la secuencia de entrada tendrá todos los nombres de archivo de ese directorio. Después de eso, puede concatenar la ruta del directorio con cada nombre de archivo y llamar a getResourceAsStream para cada archivo en un bucle.fuente
Tuve el mismo problema cuando intentaba cargar algunas configuraciones de hadoop de los recursos empaquetados en el jar ... tanto en el IDE como en el jar (versión de lanzamiento).
Descubrí
java.nio.file.DirectoryStream
que funciona mejor para iterar sobre el contenido del directorio tanto en el sistema de archivos local como en el jar.fuente
El siguiente código devuelve la "carpeta" deseada como Ruta, independientemente de si está dentro de un jar o no.
Requiere java 7+.
fuente
folder
) parece ignorarse al crear el sistema de archivos. PorgetPath
lo tanto no regresafolder/path/to/...
, sino solopath/to/...
.Otra solución, puedes hacerlo usando
ResourceLoader
así:fuente
Simple ... usa OSGi. En OSGi puede iterar sobre las entradas de su paquete con findEntries y findPaths.
fuente
Dentro de mi archivo jar tenía una carpeta llamada Cargar, esta carpeta tenía otros tres archivos de texto dentro y necesitaba tener exactamente la misma carpeta y archivos fuera del archivo jar, utilicé el siguiente código:
fuente
Como señalan las otras respuestas, una vez que los recursos están dentro de un archivo jar, las cosas se ponen realmente feas. En nuestro caso, esta solución:
https://stackoverflow.com/a/13227570/516188
funciona muy bien en las pruebas (ya que cuando se ejecutan las pruebas, el código no está empaquetado en un archivo jar), pero no funciona cuando la aplicación realmente se ejecuta normalmente. Entonces, lo que he hecho es ... codifico la lista de archivos en la aplicación, pero tengo una prueba que lee la lista real del disco (puedo hacerlo ya que funciona en las pruebas) y falla si la lista real no No coincide con la lista que devuelve la aplicación.
De esa manera tengo un código simple en mi aplicación (sin trucos), y estoy seguro de que no olvidé agregar una nueva entrada en la lista gracias a la prueba.
fuente
Este enlace te dice cómo.
La magia es el método getResourceAsStream ():
fuente