将文件添加到目录时无法获取新文件

时间:2013-07-02 18:49:54

标签: java eclipse file jetty

我会先发布我的代码:

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)的调用之间看到新添加的目录?

2 个答案:

答案 0 :(得分:1)

WEB-INF/classes中的内容由许多不同的组件管理,一些在Eclipse中,一些在Jetty中,一些在构建工具中。 当您使用Servlet API时,不建议使用标准Java文件I / O访问磁盘上的这些内容。

该目录中的内容主要通过类加载器访问(使用getResource()loadClass()

不要将动态内容放在该目录中。

可能发生的事情是,您是在项目树中创建它,eclipse经历其构建生命周期,内容被编译或复制到项目的WEB-INF/classes输出目录中。然后,Eclipse要么构建战争并进行部署,要么进行就地部署。然后Jetty和servlet规范启动,它也解压缩(如果需要),四处移动,创建工作目录和临时目录,并开始使用Servlet规范的要求管理应用程序。

如果要管理动态内容,可以在运行时选择一些选项。

  1. 如果您希望Jetty能够将内容提供给HTTP客户端,则不要将此内容放在WEB-INF树内的任何位置(根据Servlet规范,整个树都被拒绝访问)。 / LI>
  2. 如果您希望Jetty及其DefaultServletDefaultHandlerResourceHandler提供内容,您可以将其放在WEB-INF树之外的磁盘上的任何位置(您只需配置相应的servlet或处理程序即可使用该目录)
  3. 如果您想自己管理目录内容,甚至是为HTTP客户端提供服务,那么您可以将它放在WEB-INF树之外的磁盘上,因为有许多进程可以管理该树,但是没有保证树不受你控制之外的东西的影响。
  4. 如果使用嵌入式模式jetty,则为#2配置的一些示例。

答案 1 :(得分:0)

如果您编译了JAR,这通常是个问题。

Netbeans将在bin文件夹中查找预编译对象,除非您另有说明。

我会坚持使用Clean + Run。