Java:扫描特定文件的文件夹的有效方法

时间:2011-04-09 08:29:29

标签: java performance

我正在使用我的Java应用程序联系外部服务。

流程如下: - >我生成一个XML文件,并将其放在一个文件夹中,然后该服务处理该文件并返回另一个具有相同名称的文件,其扩展名为.out

现在我将文件放入文件夹后,我开始循环,直到我收回该文件,以便我可以读取结果。

以下是代码:

        fileName += ".out";
        File f = new File(fileName);
        do
        {
            f = new File(fileName);
        } while (!f.exists());

        response = readResponse(fileName); // got the response now read it

我的问题来了,我是以正确的方式做到的,是否有更好/更有效的方式等待文件?

一些信息:我在WinXP上运行我的应用程序,通常需要外部服务不到一秒钟来响应文件,我每天向此服务发送大约200个请求。包含结果文件的文件夹的路径始终相同。

欢迎所有建议。

感谢您的时间。

1 个答案:

答案 0 :(得分:8)

没有理由重新创建File对象。它只表示文件位置,文件是否存在。你也可能不想要一个没有至少短暂延迟的循环,否则它只会在文件存在之前最大化一个处理器。你可能想要这样的东西:

File file = new File(filename);
while (!file.exists()) {
    Thread.sleep(100);
}

编辑:Ingo在评论中提出了一个很好的观点。该文件可能不完全存在只是因为它存在。确保其准备就绪的一种方法是让第一个进程在第一个进程完全写入后创建第二个文件。然后让Java程序检测到第二个文件,删除它然后安全地读取第一个文件。