una seticon ruta proyecto poner obtener manejo imagenes imagen guardar como carpeta cargar java file maven

seticon - poner imagen en jlabel java



¿Cómo cargo un archivo de la carpeta de recursos? (11)

Mi proyecto tiene la siguiente estructura:

/src/main/java/ /src/main/resources/ /src/test/java/ /src/test/resources/

Tengo un archivo en /src/test/resources/test.csv y quiero cargar el archivo de una prueba unitaria en /src/test/java/MyTest.java

Tengo este código que no funcionó. Se queja "No such such file or directory".

BufferedReader br = new BufferedReader (new FileReader(test.csv))

También intenté esto

InputStream is = (InputStream) MyTest.class.getResourcesAsStream(test.csv))

Esto tampoco funciona. Devuelve null . Estoy usando Maven para construir mi proyecto.


¿Funciona el código cuando no se ejecuta el paquete Maven-build, por ejemplo cuando se ejecuta desde su IDE? Si es así, asegúrese de que el archivo esté realmente incluido en el contenedor. La carpeta de recursos debe incluirse en el archivo pom, en <build><resources> .


Ahora estoy ilustrando el código fuente para leer una fuente del directorio de recursos creados de maven,

scr / main / resources / calibril.ttf

Font getCalibriLightFont(int fontSize){ Font font = null; try{ URL fontURL = OneMethod.class.getResource("/calibril.ttf"); InputStream fontStream = fontURL.openStream(); font = new Font(Font.createFont(Font.TRUETYPE_FONT, fontStream).getFamily(), Font.PLAIN, fontSize); fontStream.close(); }catch(IOException | FontFormatException ief){ font = new Font("Arial", Font.PLAIN, fontSize); ief.printStackTrace(); } return font; }

Me funcionó y espero que todo el código fuente también te ayude, ¡disfruta!


Aquí hay una solución rápida con el uso de Guava :

import com.google.common.base.Charsets; import com.google.common.io.Resources; public String readResource(final String fileName, Charset charset) throws IOException { return Resources.toString(Resources.getResource(fileName), charset); }

Uso:

String fixture = this.readResource("filename.txt", Charsets.UTF_8)


La siguiente clase se puede usar para cargar un resource de la classpath clase y también recibir un mensaje de error de ajuste en caso de que haya un problema con la classpath filePath indicada.

import java.io.InputStream; import java.nio.file.NoSuchFileException; public class ResourceLoader { private String filePath; public ResourceLoader(String filePath) { this.filePath = filePath; if(filePath.startsWith("/")) { throw new IllegalArgumentException("Relative paths may not have a leading slash!"); } } public InputStream getResource() throws NoSuchFileException { ClassLoader classLoader = this.getClass().getClassLoader(); InputStream inputStream = classLoader.getResourceAsStream(filePath); if(inputStream == null) { throw new NoSuchFileException("Resource file not found. Note that the current directory is the source folder!"); } return inputStream; } }


Lo hago funcionar sin ninguna referencia a "clase" o "ClassLoader".

Supongamos que tenemos tres escenarios con la ubicación del archivo ''example.file'' y su directorio de trabajo (donde se ejecuta la aplicación) es home / mydocuments / program / projects / myapp:

a) Un descendiente de subcarpeta al directorio de trabajo: myapp / res / files / example.file

b) Una subcarpeta no descendiente 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 / with C :)

1) Obtenga la ruta correcta: 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 la ruta con una barra diagonal. Si es una subcarpeta, no debe haber ninguna barra antes del nombre de la ruta. Si la subcarpeta no desciende al directorio de trabajo, tiene que hacer un CD con "../". Esto le dice al sistema que suba una carpeta.

2) Cree un objeto File pasando la ruta correcta:

File file = new File(path);

3) Ahora estás listo para ir:

BufferedReader br = new BufferedReader(new FileReader(file));


Prueba el siguiente:

ClassLoader classloader = Thread.currentThread().getContextClassLoader(); InputStream is = classloader.getResourceAsStream("test.csv");

Si lo anterior no funciona, varios proyectos se han agregado a la siguiente clase: ClassLoaderUtil (código here ).

Aquí hay algunos ejemplos de cómo se usa esa clase:

src/main/java/com/company/test/YourCallingClass.java src/main/java/com/opensymphony/xwork2/util/ClassLoaderUtil.java src/main/resources/test.csv

// java.net.URL URL url = ClassLoaderUtil.getResource("test.csv", YourCallingClass.class); Path path = Paths.get(url.toURI()); List<String> lines = Files.readAllLines(path, StandardCharsets.UTF_8);

// java.io.InputStream InputStream inputStream = ClassLoaderUtil.getResourceAsStream("test.csv", YourCallingClass.class); InputStreamReader streamReader = new InputStreamReader(inputStream, StandardCharsets.UTF_8); BufferedReader reader = new BufferedReader(streamReader); for (String line; (line = reader.readLine()) != null;) { // Process line }


Prueba los códigos de flujo en el proyecto de primavera

ClassPathResource resource = new ClassPathResource("fileName"); InputStream inputStream = resource.getInputStream();

O en proyecto no primaveral

ClassLoader classLoader = getClass().getClassLoader(); File file = new File(classLoader.getResource("fileName").getFile()); InputStream inputStream = new FileInputStream(file);


Solo use InputStream inputStream = ClassLoader.getSystemResourceAsStream ("xmls / employee.xml")

Aquí hay una carpeta xmls que tiene un archivo employee.xml.


Tratar:

InputStream is = MyTest.class.getResourceAsStream("/test.csv");

IIRC getResourceAsStream() por defecto es relativo al paquete de la clase.


getResource () funcionaba bien con los archivos de recursos ubicados en src/main/resources solamente. Para obtener un archivo que se encuentre en la ruta que no sea src/main/resources digamos src/test/java , debe crearlo de forma explícita.

el siguiente ejemplo puede ayudarte

import java.io.BufferedReader; import java.io.FileReader; import java.io.IOException; import java.net.URISyntaxException; import java.net.URL; public class Main { public static void main(String[] args) throws URISyntaxException, IOException { URL location = Main.class.getProtectionDomain().getCodeSource().getLocation(); BufferedReader br = new BufferedReader(new FileReader(location.getPath().toString().replace("/target/classes/", "/src/test/java/youfilename.txt"))); } }


ClassLoader loader = Thread.currentThread().getContextClassLoader(); InputStream is = loader.getResourceAsStream("test.csv");

Si utiliza el ClassLoader de contexto para encontrar un recurso, definitivamente le costará el rendimiento de la aplicación.