Mam następujący układ katalogu:
- src
- Główny
- Jawa
- zasoby
- sql (skrypty do bazy danych)
- sprężyna (konfiguracja)
- Aplikacja internetowa
W klasie ServletContextListener chcę uzyskać dostęp do plików w katalogu SQL i wyświetlić je. Zasadniczo mój problem dotyczy ścieżki, ponieważ wiem, że wyświetlanie plików w katalogu w pigułce to:
File folder = new File(path);
File[] listOfFiles = folder.listFiles();
Może mógłbym użyć ServletContextEvent
Obiektu, aby spróbować zbudować ścieżkę doresources/sql
public void contextInitialized(ServletContextEvent event) {
event.getServletContext(); //(getRealPath etc.)
}
Czy istnieje coś, co wyznaczy tę ścieżkę w sposób względny, nie zakodowany na stałe? Coś takiego new File("classpath:sql")
(najlepiej wiosna, jeśli to możliwe) lub co powinienem zrobić z serwletem, aby wskazać resources/sql
?
Odpowiedzi:
Zakładam, że zawartość
src/main/resources/
jest kopiowana doWEB-INF/classes/
twojego .war w czasie kompilacji. Jeśli tak jest, możesz po prostu to zrobić (podstawiając rzeczywiste wartości dla nazwy klasy i ładowanej ścieżki).URL sqlScriptUrl = MyServletContextListener.class .getClassLoader().getResource("sql/script.sql");
źródło
javax.servlet.ServletContextListener
. Użyłem tego jako przykładu, ponieważ pytanie zawierało fragment, zcontextInitialized
którego jest metoda zdefiniowana przezServletContextListener
interfejs.Wreszcie to, co zrobiłem:
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; } }
...
źródło
"/sql"
jako parametru? Mam problemy z początkowym ukośnikiem, Zamiast tego"sql"
działa.import org.springframework.core.io.ClassPathResource; ... File folder = new ClassPathResource("sql").getFile(); File[] listOfFiles = folder.listFiles();
Warto zauważyć, że ograniczy to opcje wdrażania,
ClassPathResource.getFile()
działa tylko wtedy, gdy kontener eksplodował (rozpakował) plik wojenny.źródło
Po prostu użyj klasy com.google.common.io.Resources . Przykład:
URL url = Resources.getResource("file name")
Następnie masz metody takie jak: .getContent (), .getFile (), .getPath () itp.
źródło