如何以编程方式获取资源目录路径

2022-08-31 10:09:58

我有以下目录布局:

  • 来源
    • 主要
      • 爪哇岛
      • 资源
        • sql(数据库脚本)
        • 弹簧(配置)
      • 网络应用

在 ServletContextListener 类中,我想访问 SQL 目录下的文件并列出它们。基本上我的问题与路径有关,因为我知道简而言之,在目录下列出文件是:

File folder = new File(path);
File[] listOfFiles = folder.listFiles();

也许我可以使用对象来尝试构建一条路径ServletContextEventresources/sql

public void contextInitialized(ServletContextEvent event) {
    event.getServletContext(); //(getRealPath etc.)
}

是否存在以相对的、非硬编码的方式设置该路径的东西?类似的东西(如果可能的话,最好是弹簧)或者我应该如何处理servletContext指向?new File("classpath:sql")resources/sql


答案 1

我假设的内容在构建时被复制到您的.war内部。如果是这种情况,你可以这样做(用实值代替类名和正在加载的路径)。src/main/resources/WEB-INF/classes/

URL sqlScriptUrl = MyServletContextListener.class
                       .getClassLoader().getResource("sql/script.sql");

答案 2

最后,这就是我所做的:

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();

推荐