4

我有大量文件(几千个 XML 文件),我需要在 java 中编写一个 GUI,根据每个文件的 XML 数据中的“类别”元素将这些文件排序为树结构。该程序可能每天运行多次,并且每天也可能对这些文件进行小的更改/添加。

如何在应用程序的后续执行期间以最小化加载时间的方式保存此排序结构?不幸的是,该程序将处理 USB 硬盘驱动器上的文件,因此我试图避免在每次运行应用程序时解析每个 XML 文档以构建此树。

例如,每个 XML 文件可能有多个属性(即“Person”的值为“Fred”,“Organization”的值为“Google”),我希望允许用户选择文件组基于 GUI 中的这些类别值。

提前感谢您的任何和所有帮助 =)

4

2 回答 2

1

好的,这就是你需要做的。

  1. 创建将存储文件名和相关 XML 树结构数据的 SQL 数据库。
    • MySQL是一个不错的免费选择。
  2. 当应用程序启动时,让它扫描目录中的文件名并与数据库的文件名列表进行比较。
    • 应解析任何未编入索引的名称并将其添加到数据库中。
    • 生成一个新线程来遍历这些未索引的文件并处理它们,因此用户不会看到任何滞后。
  3. 在应用程序上包含一个名为“重新创建缓存”的按钮。
    • 留下警告“仅在文件更改时按此按钮”或其他内容
    • 让用户告诉您的应用程序何时旧文件已更改,因为它几乎从未发生过。

作为选项 2/3 的替代方案,您可以这样做:

  1. 创建守护程序任务
    • 这将是一个单独的程序,用于维护数据库
    • 让它监视对 XML 目录的更改并适当地更新数据库。
    • 它还可以定期检查对其他文件的更改,可能每天凌晨 2 点检查一次。
于 2012-12-03T14:44:40.883 回答
1

不要在每次必须显示时一次又一次地读取和解析每个文件。您可以以其他格式存储 XML 文件中的数据,从而实现快速高效的读取。最适合的格式是关系数据库。

所以这是你需要做的:

  1. 安装 SQL 引擎。我不是许可方面的专家,但 MySQL 应该可以满足您的需求,而且它是免费的。创建一个包含与您的 XML 文件结构相匹配的列的表。
  2. 编写一个监视文件系统更改的系统服务(您可以使用 .NET 中的 FileSystemWatcher)。您可以使用 Java 而不是 C#,但是您必须通过定期轮询来实现它。
  3. 每次发生更改时,服务都会获取文件并将其发送到 SQL 数据库。在那里,您可以通过 SELECT ExtractValue(xml) 轻松解析文件。获取数据后,将它们作为插入(新文件)或更新(已编辑文件)提交到表中。
  4. 每次您需要将文件加载到树中时,您在数据库上运行一个简单的 SELECT 语句,以您需要的结构返回数据。
于 2012-12-03T14:54:20.830 回答