Dentro de un proyecto java podemos tener alamcenados recursos: imagenes, documentos de texto, etc. Para ello existe la carpeta de recursos. En la siguiente imagen puede verse la extructura d eun proyecto con su carpeta de recursos.
Para acceder a la carpeta de recursos debemos hacerlo a través del ClassLoader. El ClassLoader se encarga de cargar las distintas clases en la Maquina Virtual de Java.
Suponiendo que tengamos una clase llamada App entonces podremos acceder a su class loader del siguiente modo
// getClass() nos retorna la clase y a partir de ella se obtendrá el ClassLoader
ClassLoader loader = getClass().getClassLoader();
// Si estamos en una función estática en vez de getClass() podemos acceder directamente a la clase
ClassLoader loader = App.class.getClassLoader();
ClassLoader loader = getClass().getClassLoader();
// Si estamos en una función estática en vez de getClass() podemos acceder directamente a la clase
ClassLoader loader = App.class.getClassLoader();
El loader tiene una función getResource(String name) que nos rectorna la URL asociada al recurso a partir de la cual podremos acceder al recurso. A continuación se muestra un ejemplo completo:
package ljlg.blog.classloader;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.stream.Collectors;
/**
*
*
*/
public class App {
public static void main(String[] args) throws IOException {
App.leerArchivoRecursos();
}
public static void leerArchivoRecursos() throws IOException {
ClassLoader loader = App.class.getClassLoader();
InputStream stream = loader.getResource("datos.txt").openStream();
try (BufferedReader buffer = new BufferedReader(new InputStreamReader(stream))) {
System.out.println(buffer.lines().collect(Collectors.joining("\n")));
}
}
}
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.stream.Collectors;
/**
*
*
*/
public class App {
public static void main(String[] args) throws IOException {
App.leerArchivoRecursos();
}
public static void leerArchivoRecursos() throws IOException {
ClassLoader loader = App.class.getClassLoader();
InputStream stream = loader.getResource("datos.txt").openStream();
try (BufferedReader buffer = new BufferedReader(new InputStreamReader(stream))) {
System.out.println(buffer.lines().collect(Collectors.joining("\n")));
}
}
}
No hay comentarios:
Publicar un comentario