Java: leer un archivo de la carpeta de recursos
En Java, podemos usar getResourceAsStream
o getResource
para leer un archivo o varios archivos de una carpeta resources
o raíz de la ruta de clases.
El método getResourceAsStream
devuelve un InputStream
.
El getResource
devuelve un URL
y normalmente lo convierte en un File
; No funciona en archivo JAR.
Archivos en carpeta de recursos
1.1 Revise los archivos en el src/main/resources
, luego accederemos a los archivos y imprima el contenido del archivo.
1.2 Por defecto, compila herramientas como Maven, Gradle , o la práctica común de Java copiará todos los archivos de src/main/resources
a la raíz de target/classes
o build/classes
. Entonces, cuando intentamos leer un archivo de src/main/resources
, leemos el archivo de la raíz de la ruta de clase del proyecto.
1.3 A continuación se muestra una estructura de archivo JAR. Por lo general, los archivos de la carpeta resources
se copiarán a la raíz de la ruta de clases.
Obtenga un archivo de la carpeta de recursos.
2.1 El siguiente ejemplo demuestra el uso de getResourceAsStream
y getResource
métodos para leer un archivo json/file1.json
de la carpeta resources
e imprimir el contenido del archivo.
Nota
- El método
getResource
no funciona en el archivo JAR. - El
getResourceAsStream
El método funciona en todas partes.
Salida
2.2 Ahora, empaquetamos el proyecto en un archivo JAR y lo ejecutamos; esta vez, getResource
fallará y devolverá NoSuchFileException
o InvalidPathException
. No podemos leer los archivos dentro del archivo JAR a través de la URL del recurso.
Ejecute el archivo JAR en Linux (Ubuntu), arroja NoSuchFileException
.
Ejecute el archivo JAR en Windows, arroja InvalidPathException
.
PD Este ejemplo usa el complemento de Maven maven-jar-plugin
para crear el archivo JAR.
Obtener un archivo de la carpeta de recursos – Prueba de unidad
3.1 Colocamos los recursos de prueba en la carpeta src/test/resources
para las pruebas unitarias. Por lo general, los archivos de los recursos de prueba se copiarán en la carpeta target/test-classes
.
3.2 Funciona de la misma forma que leemos el archivo de src/main/resources
. Usamos los mismos métodos getResourceAsStream
y getResource
para leer el archivo desde src/test/resources
.
Salida
Obtiene todos los archivos de una carpeta de recursos. (Entorno NON-JAR)
Si no sabemos el nombre exacto del archivo y queremos leer todos los archivos, incluidos los archivos de subcarpetas de una carpeta de recursos, podemos usar el NIO Files.walk
para acceder y leer fácilmente los archivos.
4.1 El siguiente ejemplo usa Files.walk
para leer todos los archivos de una carpeta src/main/resources/json
:
Salida
4.2 Sin embargo, el estándar Files.walk
en el ejemplo 4.1 no puede acceder a los archivos en el archivo JAR directamente, intente ejecutar el ejemplo 4.1 en un entorno JAR y arroja FileSystemNotFoundException
.
Obtiene todos los archivos de una carpeta de recursos. (Versión JAR)
5.1 Este ejemplo muestra cómo Files.walk
una carpeta dentro de un archivo JAR a través de FileSystems
y URI jar:file:xxx.jar
.
La idea es:
- El archivo recorre la carpeta dentro de un archivo JAR usando
FileSystems
, y obtenga todo el nombre de archivo, consultegetPathsFromResourceJAR()
- Haga un bucle de todos los nombres de archivo, acceda e imprima cada archivo como en el ejemplo 2.1, consulte
getFileFromResourceAsStream()
.
Salida
Descargar código fuente
$ git clone https://github.com/mkyong/core-java
$ cd java-io
- Archivos.walk JavaDoc
- CodeSource JavaDoc
- RFC 2396 – Sintaxis y formato de un URI
- Maven – Crear archivo JAR
- Proveedor de sistema de archivos zip
- Ejemplos de archivos Java .walk
- Java – Obtener la ruta de un archivo JAR en ejecución
mkyong
Fundador de Mkyong.com, amo Java y las cosas de código abierto. Síguelo en Twitter. Si le gustan mis tutoriales, considere hacer una donación a estas organizaciones benéficas.