我会先发布我的代码:
private String path = ServerConfigProperties.getProperty("pathToDir");
public load(String path) {
File mainDir = new File(path);
for (File subDir : mainDir.listFiles()) {
if (subDir.isDirectory()) {
System.out.println(subDir.toString());
}
}
}
如果我使用eclipse mainDir
, clean
只能保存正确的子目录列表。例如,我可以在mainDir
内有一个子目录列表。当我运行代码时,子目录将全部存在。当我使用Windows资源管理器添加更多目录并再次运行代码时,打印出相同的列表,就像我没有在主目录中添加新目录一样。如果我然后停止代码,在eclipse中运行clean
,并重新启动我的代码,它最终会选择新添加的目录。 mainDir
有没有办法在运行时维护最新的目录列表?
编辑:
这是在jetty服务器上运行的。每次添加新目录时都不必重新启动服务器。在服务器中的不同时间调用load(path)
,为什么不在load(path)
的调用之间看到新添加的目录?
答案 0 :(得分:1)
WEB-INF/classes
中的内容由许多不同的组件管理,一些在Eclipse中,一些在Jetty中,一些在构建工具中。
当您使用Servlet API时,不建议使用标准Java文件I / O访问磁盘上的这些内容。
该目录中的内容主要通过类加载器访问(使用getResource()或loadClass()。
不要将动态内容放在该目录中。
可能发生的事情是,您是在项目树中创建它,eclipse经历其构建生命周期,内容被编译或复制到项目的WEB-INF/classes
输出目录中。然后,Eclipse要么构建战争并进行部署,要么进行就地部署。然后Jetty和servlet规范启动,它也解压缩(如果需要),四处移动,创建工作目录和临时目录,并开始使用Servlet规范的要求管理应用程序。
如果要管理动态内容,可以在运行时选择一些选项。
WEB-INF
树内的任何位置(根据Servlet规范,整个树都被拒绝访问)。 / LI>
WEB-INF
树之外的磁盘上的任何位置(您只需配置相应的servlet或处理程序即可使用该目录)WEB-INF
树之外的磁盘上,因为有许多进程可以管理该树,但是没有保证树不受你控制之外的东西的影响。如果使用嵌入式模式jetty,则为#2配置的一些示例。
答案 1 :(得分:0)
如果您编译了JAR,这通常是个问题。
Netbeans将在bin文件夹中查找预编译对象,除非您另有说明。
我会坚持使用Clean + Run。