Mi proyecto tiene la siguiente estructura:
/src/main/java/
/src/main/resources/
/src/test/java/
/src/test/resources/
Tengo un archivo /src/test/resources/test.csv
y quiero cargar el archivo desde una prueba unitaria en/src/test/java/MyTest.java
Tengo este código que no funcionó. Se queja "No existe tal archivo o directorio".
BufferedReader br = new BufferedReader (new FileReader(test.csv))
También probé esto
InputStream is = (InputStream) MyTest.class.getResourcesAsStream(test.csv))
Esto tampoco funciona. Vuelve null
. Estoy usando Maven para construir mi proyecto.
this.getClass().getResource("/test.csv")
Respuestas:
Intenta lo siguiente:
Si lo anterior no funciona, se han agregado varios proyectos a la siguiente clase: 1 (código aquí ). 2
ClassLoaderUtil
Aquí hay algunos ejemplos de cómo se usa esa clase:
Notas
fuente
Object.class.getClassLoader();
, desde un contexto estático que no funcionó, esta sugerencia sí funciona, bueno, casi inyecta%20
espacios, lo que me da unFileNotFoundException
Tratar:
IIRC
getResourceAsStream()
por defecto es relativo al paquete de la clase.Como señaló @Terran, no olvide agregar el
/
al comienzo del nombre de archivofuente
String
stackoverflow.com/a/35446009/544045Aquí hay una solución rápida con el uso de guayaba :
Uso:
fuente
Pruebe los códigos de flujo en el proyecto Spring
O en un proyecto que no sea de primavera
fuente
Proyecto no primaveral:
Para proyectos de primavera, también puede usar un código de línea para obtener cualquier archivo en la carpeta de recursos:
fuente
Ahora estoy ilustrando el código fuente para leer una fuente del directorio de recursos creados por Maven,
Funcionó para mí y espero que todo el código fuente también te ayude, ¡Disfruta!
fuente
Para java después de 1.7
fuente
Si utiliza el ClassLoader de contexto para encontrar un recurso, definitivamente le costará el rendimiento de la aplicación.
fuente
Importa lo siguiente:
El siguiente método devuelve un archivo en una ArrayList of Strings:
fuente
Me enfrenté al mismo problema .
El cargador de clases no encontró el archivo, lo que significa que no estaba empaquetado en el artefacto (jar). Necesitas construir el proyecto . Por ejemplo, con maven:
Por lo tanto, los archivos que agregó a la carpeta de recursos entrarán en la compilación de Maven y estarán disponibles para la aplicación.
Me gustaría conservar mi respuesta: no explica cómo leer un archivo (otras respuestas sí lo explican), responde por qué
InputStream
oresource
fue nulo . Una respuesta similar está aquí .fuente
getResource () funcionaba bien con los archivos de recursos colocados
src/main/resources
solo. Para obtener un archivo que se encuentra en la ruta de acceso, aparte desrc/main/resources
decirsrc/test/java
, debe crearlo de forma explícita.el siguiente ejemplo puede ayudarte
fuente
¿Funciona el código cuando no se ejecuta el jar Maven-build, por ejemplo, cuando se ejecuta desde su IDE? Si es así, asegúrese de que el archivo esté realmente incluido en el jar. La carpeta de recursos debe incluirse en el archivo pom, en
<build><resources>
.fuente
La siguiente clase se puede usar para cargar un
resource
desdeclasspath
y también recibir un mensaje de error de ajuste en caso de que haya un problema con el dadofilePath
.fuente
Resolví este problema agregando
/scr/main/resources
carpeta a miJava Build Path
fuente
Lo hice funcionar tanto en jar jar como en IDE escribiendo como
fuente
fuente
Puede usar com.google.common.io.Resources.getResource para leer la url del archivo y luego obtener el contenido del archivo usando java.nio.file.Files para leer el contenido del archivo.
fuente
Lo hago funcionar sin ninguna referencia a "clase" o "ClassLoader".
Digamos que tenemos tres escenarios con la ubicación del archivo 'example.file' y su directorio de trabajo (donde se ejecuta su aplicación) es home / mydocuments / program / projects / myapp:
a) Una subcarpeta que desciende al directorio de trabajo: myapp / res / files / example.file
b) Una subcarpeta que no desciende al directorio de trabajo: projects / files / example.file
b2) Otra subcarpeta que no desciende al directorio de trabajo: program / files / example.file
c) Una carpeta raíz: home / mydocuments / files / example.file (Linux; en Windows reemplace home / con C :)
1) Obtenga el camino correcto: a)
String path = "res/files/example.file";
b)String path = "../projects/files/example.file"
b2)String path = "../../program/files/example.file"
c)String path = "/home/mydocuments/files/example.file"
Básicamente, si se trata de una carpeta raíz, inicie el nombre de la ruta con una barra diagonal. Si es una subcarpeta, no debe haber una barra inclinada antes del nombre de la ruta. Si la subcarpeta no desciende al directorio de trabajo, debe cd a ella usando "../". Esto le dice al sistema que suba una carpeta.
2) Cree un objeto File pasando la ruta correcta:
3) Ahora estás listo para ir:
fuente