¿Hay alguna manera en Java para construir una instancia de archivo en un recurso recuperado de un jar a través del cargador de clases?
Mi aplicación utiliza algunos archivos del archivo jar (predeterminado) o de un directorio del sistema de archivos especificado en tiempo de ejecución (entrada del usuario). Estoy buscando una forma consistente de
a) cargar estos archivos como una secuencia
b) enumerar los archivos en el directorio definido por el usuario o el directorio en el jar respectivamente
Editar: Aparentemente, el enfoque ideal sería mantenerse alejado de java.io.File por completo. ¿Hay alguna manera de cargar un directorio desde el classpath y enumerar sus contenidos (archivos / entidades contenidos en él)?
fuente
InputStream
se obtiene degetResourceAsStream
paradas para recuperar los bytes del recurso después de ese tamaño y en su lugar devuelve 0 si está contenido en un sistema de archivos comprimido como un jar. Parece que se ve obligado a usargetResource
y cargar el archivo independientemente de esto en ese caso.read
método que decidió cuántos datos leer (no estaba al tanto de eso). Y parece que todo el archivo se lee si el archivo que se está leyendo se encuentra en una carpeta normal. Si el archivo está dentro de un archivo jar porque ha sido empaquetado, solo lee partes de él.InputStream
, si desea leer todo el recurso, debe repetir hasta queread
devuelva -1.Tuve el mismo problema y pude usar lo siguiente:
fuente
FileSystem
objeto y obtenerloPath
. Entonces puedes leerlo como de costumbre. (ver stackoverflow.com/a/22605905/1876344 )Aquí hay un poco de código de una de mis aplicaciones ... Avíseme si se adapta a sus necesidades. Puede usar esto si conoce el archivo que desea usar.
Espero que ayude.
fuente
toURI()
fallará.Una forma confiable de construir una instancia de archivo en un recurso recuperado de un jar es copiar el recurso como una secuencia en un archivo temporal (el archivo temporal se eliminará cuando la JVM salga):
fuente
Prueba esto:
Hay más métodos disponibles, por ejemplo, ver aquí: http://www.javaworld.com/javaworld/javaqa/2003-08/01-qa-0808-property.html
fuente
Esta es una opción: http://www.uofr.net/~greg/java/get-resource-listing.html
fuente