我正在与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个请求。存放结果文件的文件夹的路径总是相同的。
欢迎大家提出建议。
感谢您的宝贵时间。
没有理由重新创建File
对象。它只表示文件位置,不管文件是否存在。此外,您可能不想要一个没有至少短延迟的循环,否则它只会使处理器满负荷,直到文件存在。您可能想要这样做:
File file = new File(filename);
while (!file.exists()) {
Thread.sleep(100);
}
编辑: Ingo在评论中提出了一个很好的观点。文件可能并不完全存在,因为它存在。确保文件准备就绪的一种方法是,在第一个文件完全写入后,让第一个进程创建第二个文件。然后让Java程序检测第二个文件,删除它,然后安全地读取第一个文件。