我正在使用我的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
Run Code Online (Sandbox Code Playgroud)
我的问题来了,我是以正确的方式做的,是否有更好/更有效的方式等待文件?
一些信息:我在WinXP上运行我的应用程序,通常需要外部服务不到一秒钟来响应文件,我每天向此服务发送大约200个请求.包含结果文件的文件夹的路径始终相同.
欢迎所有建议.
感谢您的时间.
没有理由重新创建File对象.它只表示文件位置,文件是否存在.你也可能不想要一个没有至少短暂延迟的循环,否则它只会在文件存在之前最大化一个处理器.你可能想要这样的东西:
File file = new File(filename);
while (!file.exists()) {
Thread.sleep(100);
}
Run Code Online (Sandbox Code Playgroud)
编辑: Ingo在评论中提出了一个很好的观点.该文件可能不完全存在只是因为它存在.保证它已准备就绪的一种方法是让第一个进程在第一个进程完全写入后创建第二个文件.然后让Java程序检测到第二个文件,删除它然后安全地读取第一个文件.