J'ai la disposition de répertoire suivante:
- src
- principale
- Java
- Ressources
- sql (scripts pour la base de données)
- ressort (configuration)
- webapp
Dans une classe ServletContextListener, je souhaite accéder aux fichiers du répertoire SQL et les lister. Fondamentalement, mon problème est avec le chemin, car je sais que répertorier les fichiers sous un répertoire en un mot est:
File folder = new File(path);
File[] listOfFiles = folder.listFiles();
Peut-être que je pourrais utiliser l' ServletContextEvent
objet pour essayer de créer un chemin versresources/sql
public void contextInitialized(ServletContextEvent event) {
event.getServletContext(); //(getRealPath etc.)
}
Existe-t-il quelque chose pour définir ce chemin de manière relative et non codée en dur? Quelque chose comme new File("classpath:sql")
(de préférence ressort si possible) ou que dois-je faire avec le servletContext vers lequel pointer resources/sql
?
Réponses:
Je suppose que le contenu de
src/main/resources/
est copiéWEB-INF/classes/
dans votre .war au moment de la construction. Si tel est le cas, vous pouvez simplement le faire (en substituant des valeurs réelles au nom de la classe et au chemin en cours de chargement).URL sqlScriptUrl = MyServletContextListener.class .getClassLoader().getResource("sql/script.sql");
la source
javax.servlet.ServletContextListener
. J'ai utilisé cela comme exemple car la question avait un extrait de code à partircontextInitialized
duquel est une méthode définie par l'ServletContextListener
interface.Enfin, voici ce que j'ai fait:
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; } }
...
la source
"/sql"
comme paramètre? J'ai des problèmes avec une barre oblique de départ, au lieu de cela"sql"
fonctionne.import org.springframework.core.io.ClassPathResource; ... File folder = new ClassPathResource("sql").getFile(); File[] listOfFiles = folder.listFiles();
Il est à noter que cela limitera vos options de déploiement,
ClassPathResource.getFile()
ne fonctionne que si le conteneur a explosé (décompressé) votre fichier war.la source
Utilisez simplement la classe com.google.common.io.Resources . Exemple:
URL url = Resources.getResource("file name")
Après cela, vous avez des méthodes comme: .getContent (), .getFile (), .getPath () etc.
la source