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 getResourceno funciona en el archivo JAR.
-  El getResourceAsStreamEl 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.