我有以下目录布局:
- SRC
- 主要
- java的
- 资源
- sql(数据库脚本)
- 弹簧(配置)
- Web应用程序
在ServletContextListener类中,我想访问SQL目录下的文件并列出它们.基本上我的问题是路径,因为我知道简单地列出目录下的文件是:
File folder = new File(path);
File[] listOfFiles = folder.listFiles();
Run Code Online (Sandbox Code Playgroud)
也许我可以使用ServletContextEvent
Object来尝试构建路径resources/sql
public void contextInitialized(ServletContextEvent event) {
event.getServletContext(); //(getRealPath etc.)
}
Run Code Online (Sandbox Code Playgroud)
是否存在以相对的非硬编码方式设置该路径的东西?像new File("classpath:sql")
(最好是弹簧,如果可能的话)或者我应该用servletContext指向resources/sql
什么?
Dev*_*Dev 59
我假设在构建时将内容src/main/resources/
复制到WEB-INF/classes/
.war中.如果是这种情况你可以这样做(用实数值代替类名和被加载的路径).
URL sqlScriptUrl = MyServletContextListener.class
.getClassLoader().getResource("sql/script.sql");
Run Code Online (Sandbox Code Playgroud)
why*_*yem 51
最后这就是我所做的.
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;
}
}
Run Code Online (Sandbox Code Playgroud)
...
File folder = getFileFromURL();
File[] listOfFiles = folder.listFiles();
Run Code Online (Sandbox Code Playgroud)
sam*_*wis 15
import org.springframework.core.io.ClassPathResource;
...
File folder = new ClassPathResource("sql").getFile();
File[] listOfFiles = folder.listFiles();
Run Code Online (Sandbox Code Playgroud)
值得注意的是,这将限制您的部署选项,ClassPathResource.getFile()
仅在容器爆炸(解压缩)您的war文件时才有效.
只需使用com.google.common.io.Resources类。例子:
URL url = Resources.getResource("file name")
Run Code Online (Sandbox Code Playgroud)
之后你有像这样的方法:.getContent(), .getFile(), .getPath() 等
归档时间: |
|
查看次数: |
161640 次 |
最近记录: |