java - pert - Cómo obtener la ruta del directorio de recursos mediante programación
ruta critica pdf (3)
Tengo el siguiente diseño de directorio:
- src
- principal
- Java
- recursos
- sql (scripts para la base de datos)
- primavera (configuración)
- Aplicación Web
Dentro de una clase ServletContextListener, quiero acceder a los archivos en el directorio SQL y listarlos. Básicamente mi problema es con la ruta, porque sé que enumerar los archivos debajo de un directorio en pocas palabras es:
File folder = new File(path);
File[] listOfFiles = folder.listFiles();
Tal vez podría usar el Objeto ServletContextEvent
para intentar crear una ruta a los resources/sql
public void contextInitialized(ServletContextEvent event) {
event.getServletContext(); //(getRealPath etc.)
}
¿Existe algo para establecer esa ruta de una manera relativa, no codificada? Algo así como un new File("classpath:sql")
(preferiblemente en primavera si es posible) o ¿qué debo hacer con servletContext para apuntar a resources/sql
?
Asumo que el contenido de src/main/resources/
se copia a WEB-INF/classes/
dentro de tu .war en tiempo de compilación. Si ese es el caso, puede hacerlo (sustituyendo los valores reales por el nombre de clase y la ruta que se está cargando).
URL sqlScriptUrl = MyServletContextListener.class
.getClassLoader().getResource("sql/script.sql");
Finalmente esto es lo que hice.
private File getFileFromURL() {
URL url = this.getClass().getClassLoader().getResource("/sql");
File file = null;
try {
file = new File(url.toURI());
} catch (URISyntaxException e) {
file = new File(url.getPath());
} finally {
return file;
}
}
...
File folder = getFileFromURL();
File[] listOfFiles = folder.listFiles();
import org.springframework.core.io.ClassPathResource;
...
File folder = new ClassPathResource("sql").getFile();
File[] listOfFiles = folder.listFiles();
Vale la pena señalar que esto limitará sus opciones de implementación, ClassPathResource.getFile()
solo funciona si el contenedor ha explotado (descomprimido) su archivo war.