resourceloader resource read not from found java spring spring-boot resources spring-properties

java - read - spring boot static resources not found



Spring Boot accede a recursos estáticos que faltan scr/main/resources (7)

Estoy trabajando en una aplicación Spring Boot. Necesito analizar un archivo XML (países.xml) al inicio. El problema es que no entiendo dónde ponerlo para poder acceder. La estructura de mis carpetas es

ProjectDirectory/src/main/java ProjectDirectory/src/main/resources/countries.xml

Mi primera idea fue ponerlo en src / main / resources, pero cuando trato de crear un archivo (países.xml) obtengo un NPE y el stacktrace muestra que mi archivo está en ProjectDirectory (por lo tanto, src / main / resources / no se agrega). Traté de crear el archivo (resources / country.xml) y la ruta se vería como ProjectDirectory / resources / country.xml (por lo que nuevamente no se agrega src / main).

Traté de agregar esto sin resultado

@Override public void addResourceHandlers(final ResourceHandlerRegistry registry) { registry.addResourceHandler("/resources/**").addResourceLocations("/resources/"); registry.setOrder(Ordered.HIGHEST_PRECEDENCE); super.addResourceHandlers(registry); }

Sé que puedo agregar src / main / manualmente, pero quiero entender por qué no funciona como debe. También probé ejemplos con ResourceLoader, sin el mismo resultado.

¿Alguien podría sugerir cuál es el problema?

ACTUALIZACIÓN: solo para futuras referencias: después de construir el proyecto, encontré un problema con el acceso al archivo, así que cambié el archivo a InputStream

InputStream is = new ClassPathResource("countries.xml").getInputStream();


Mientras trabaja con la aplicación Spring Boot, es difícil obtener los recursos de classpath usando resource.getFile() cuando se implementa como JAR ya que me enfrenté al mismo problema. Esta exploración se resolverá utilizando Stream, que descubrirá todos los recursos que se encuentran en cualquier lugar de classpath.

A continuación se muestra el fragmento de código para el mismo:

ClassPathResource classPathResource = new ClassPathResource("fileName"); InputStream inputStream = classPathResource.getInputStream(); content = IOUtils.toString(inputStream);


Necesitas usar la siguiente construcción

InputStream in = getClass().getResourceAsStream("/yourFile");

Tenga en cuenta que debe agregar esta barra diagonal antes del nombre de su archivo.


Para obtener los archivos en el classpath:

Resource resource = new ClassPathResource("countries.xml"); File file = resource.getFile();

Para leer el archivo en Startup use @PostConstruct :

@Configuration public class ReadFileOnStartUp { @PostConstruct public void afterPropertiesSet() throws Exception { //Gets the XML file under src/main/resources folder Resource resource = new ClassPathResource("countries.xml"); File file = resource.getFile(); //Logic to read File. } }

Aquí hay un pequeño ejemplo para leer un archivo XML al iniciar la aplicación Spring Boot.


Puede usar el siguiente código para leer el archivo en Cadena desde la carpeta de recursos.

final Resource resource = new ClassPathResource("public.key"); String publicKey = null; try { publicKey = new String(Files.readAllBytes(resource.getFile().toPath()), StandardCharsets.UTF_8); } catch (IOException e) { e.printStackTrace(); }


Simplemente use Spring tipo ClassPathResource .

File file = new ClassPathResource("countries.xml").getFile();

Mientras este archivo esté en algún lugar de classpath, Spring lo encontrará. Esto puede ser src/main/resources durante el desarrollo y las pruebas. En producción, puede ser el directorio actual en ejecución.


Uso Spring Boot, mi solución al problema fue

"src/main/resources/myfile.extension"

Espero que ayude a alguien.


Yo uso el arranque de primavera, así que puedo usar:

File file = ResourceUtils.getFile("classpath:myfile.xml");