我正在使用 Axis 和 Apache Tomcat 7 编写一个 Web 服务。该服务使用第三方库对文件进行一些转换,并最终创建一个包含更多文件(子文件夹和常规文件)的文件夹。转换完成后,该服务会创建一个 zip 存档并将其返回。当它收到一个新请求时,首先它会删除在最后一个请求期间创建的文件并开始处理该请求。
服务本身运行良好,至少第一个请求得到了满足。问题是当收到第二个请求时,服务无法删除最后一个请求期间生成的所有文件。我使用的是 Windows XP 和 Process Explorer,我看到 Tomcat 保持一些文件(不是所有文件)打开,这就是我无法删除它的原因。
即使服务操作结束,我正在使用的库是否可能使文件保持打开状态?在我用来创建 zip 存档的代码中,我似乎关闭了所有打开的流。顺便说一句,即使我原谅关闭它们,在服务操作将结果返回给客户后它们还能保持打开状态吗?如果是这样,为什么 Tomcat 进程只打开一些文件?
似乎一段时间后,某个文件被“释放”,但其他文件始终保持打开状态......
我希望有人能给我一些关于如何处理这种情况的建议:)