Ich habe das folgende Verzeichnislayout:
- src
- Main
- Java
- Ressourcen
- SQL (Skripte für die Datenbank)
- Feder (Konfiguration)
- Web-App
Innerhalb einer ServletContextListener-Klasse möchte ich auf die Dateien im SQL-Verzeichnis zugreifen und sie auflisten. Grundsätzlich ist mein Problem mit dem Pfad, weil ich weiß, dass das Auflisten von Dateien unter einem Verzeichnis auf den Punkt gebracht ist:
File folder = new File(path);
File[] listOfFiles = folder.listFiles();
Vielleicht könnte ich das ServletContextEvent
Objekt verwenden, um einen Pfad zu erstellenresources/sql
public void contextInitialized(ServletContextEvent event) {
event.getServletContext(); //(getRealPath etc.)
}
Gibt es etwas, um diesen Pfad relativ und nicht fest codiert festzulegen? So etwas wie new File("classpath:sql")
(vorzugsweise Frühling, wenn möglich) oder was soll ich mit dem servletContext tun, um darauf zu zeigen resources/sql
?
Antworten:
Ich gehe davon aus, dass der Inhalt von
src/main/resources/
zumWEB-INF/classes/
Zeitpunkt der Erstellung in Ihre .war-Datei kopiert wird. Wenn dies der Fall ist, können Sie dies einfach tun (indem Sie den Klassennamen und den zu ladenden Pfad durch echte Werte ersetzen).quelle
javax.servlet.ServletContextListener
. Ich habe das als Beispiel verwendet, weil die Frage einen Ausschnitt hatte, auscontextInitialized
dem eine von derServletContextListener
Schnittstelle definierte Methode stammt .Schließlich habe ich Folgendes getan:
...
quelle
"/sql"
als Parameter zu verwenden? Ich habe Probleme mit einem Start-Schrägstrich,"sql"
funktioniert stattdessen .Es ist erwähnenswert, dass dies Ihre Bereitstellungsoptionen einschränkt und
ClassPathResource.getFile()
nur funktioniert, wenn der Container Ihre War-Datei aufgelöst (entpackt) hat.quelle
Verwenden Sie einfach die Klasse com.google.common.io.Resources . Beispiel:
Danach haben Sie Methoden wie: .getContent (), .getFile (), .getPath () usw.
quelle