在java中检查新的xml文件的最佳方法

时间:2014-05-06 04:14:46

标签: java xml multithreading file jdbc

我正在编写一个程序来解析拥有城市旅游景点的xml文件。每个城市都有自己的xml,节点有成本,地址等信息...我想在计时器上有一个线程来检查新的xml文件或特定目录中现有的新版本。创建线程不是问题。我只是不知道检查这些新文件或更改文件的最佳方法是什么。有没有人有任何建议,一个简单的方法来做到这一点。我正在考虑为处理的每个文件创建一个csv文件,其中包含名称和日期更改信息,然后在检查新的或更改的xml时检查此csv文件,但这看起来过于复杂,我想要一个更好的解决方案。我现在没有代码提供这种机制,我只是想找个方向进去。 我的想法就是为不同的城市提供符合模式的xml,它将在下次程序运行时自动更新我的数据库,或者如果已经运行则会定期更新。

2 个答案:

答案 0 :(得分:4)

要避免轮询,您应该观察包含xml文件的目录。 Oracle在Watching a Directory for Changes

上有关于该主题的大量文档

答案 1 :(得分:0)

您所描述的内容看起来像异步提供新信息。这种问题的一个常见缺陷是竞争条件:如果您在修改文件时尝试读取文件,或者在您阅读文件时其他东西试图写入文件,会发生什么?如果您的应用程序(或编辑您的xml文件的应用程序)在处理过程中中断,会发生什么?为避免此类问题,您应移动文件(更改名称或目录)以跟随其状态,因为移动是普通文件系统上的原子操作。如果你想要一个防弹解决方案,你应该:

  • 正在由外部部件编辑或转移的文件
  • 文件已完全编辑或转移,可供您随时阅读
  • 正在处理的文件
  • 文件已完全处理
  • 包含错误的文件(尝试处理但无法完成处理)

第一个是外部责任(你只是定义一个接口合同),后者是你的。如果4或5个目录(如果您选择该解决方案)的成本,则收益为:

  • 如果在编辑传输xml文件时出现任何问题,外部应用程序只需重新启动其操作
  • 如果文件无法处理(语法错误,超大,......),则将其分开进行进一步分析,但不会阻止处理其他文件
  • 你只需看几乎空的目录
  • 如果您的应用在处理文件的过程中中断,则在下次启动时可以重新开始处理。