resource read from java maven filenotfoundexception

read - resource java



FileNotFoundException en src/main/resources (4)

Coloqué un archivo en mi proyecto principal en src / main / resources, el nombre de los archivos es simplemente temp.txt.

Cuando intento abrir el archivo:

BufferedReader br = new BufferedReader(new FileReader(new File("./temp.txt")));

Me sale un error:

Exception in thread "main" java.io.FileNotFoundException: /temp.txt

todos los archivos bajo src / main / resources se colocan en la carpeta raíz del classpath bajo maven. Entonces, ¿por qué el programa no puede encontrar el archivo aquí?


Maven coloca los archivos en /src/main/resouces/ en el paquete predeterminado de su classpath. Por lo tanto puedes cargar a través del cargador de clases:

InputStream in = getClass().getResourcesAsStream("temp.txt")

Para obtener más información, consulte la Class#getResoucesAsStream .


Si va a empaquetar el archivo en la ruta de clases, entonces léalo como tal ... de la ruta de clases.

Estructura Maven

src main resources file.txt

Después de que se construye, el archivo se coloca en la raíz de la ruta de clase. Asi que usa

InputStream is = getClass().getResourceAsStream("/file.txt"); BufferedReader reader = new BufferedReader(new InputStreamReader(is));

El / en frente de file.txt lo llevará a la raíz, desde cualquier paquete en el que se encuentre la clase.

ACTUALIZAR

Ejemplo de prueba

package com.underdogdevs.; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; public class TestResourceFile { public static void main(String[] args) throws IOException { InputStream is = TestResourceFile.class.getResourceAsStream("/test.txt"); BufferedReader reader = new BufferedReader(new InputStreamReader(is)); String line; while ((line = reader.readLine()) != null) { System.out.println(line); } } }


Tuvo este problema al configurar pruebas de integración en Jenkins.
El problema fue causado por tener el trabajo dentro de una carpeta con espacios en el nombre. Así que en lugar de tener una carpeta de área de trabajo llamada foo bar , Jenkins creó foo%20bar y todas las pruebas fallaron con la FileNotFoundException .

La solución es simplemente cambiar el nombre de su carpeta para que no tenga espacios.


solo dale esto como tu camino

BufferedReader br = new BufferedReader(new FileReader(new File("src/main/resources/temp.txt")));