4

多数のファイル (数千の XML ファイル) があり、各ファイルの XML データ内の「カテゴリ」要素に基づいてこれらのファイルをツリー構造にソートする Java で GUI を作成する必要があります。このプログラムは 1 日に複数回実行される可能性があり、これらのファイルにも毎日小さな変更/追加が加えられる可能性があります。

このソートされた構造を保存して、その後のアプリケーション実行時のロード時間を最小限に抑えるにはどうすればよいですか? 残念ながら、このプログラムは USB ハードドライブ上のファイルを操作するため、このツリーを構築するためにアプリケーションを実行するたびに各 XML ドキュメントを解析しないようにしています。

たとえば、各 XML ファイルには複数の属性 (つまり、値が "Fred" の "Person" と値が "Google" の "Organization") があり、ユーザーがファイルのグループを選択できるようにしたいと考えています。 GUI 内のこれらのカテゴリ値に基づいています。

事前にすべての支援に感謝します =)

4

2 に答える 2

1

表示する必要があるたびに、すべてのファイルを何度も読み取ったり解析したりしないでください。XMLファイルのデータを他の形式で保存できるため、高速で効率的な読み取りが可能です。そのための完璧なフォーマットはリレーショナルデータベースです。

だからここにあなたがする必要があることです:

  1. SQLエンジンをインストールします。私はライセンスの専門家ではありませんが、MySQLはあなたが必要とするものを達成するはずであり、それは無料です。XMLファイルの構造に一致するcomlumnsを含むテーブルを作成します。
  2. ファイルシステムの変更を監視するシステムサービスを作成します(.NETからFileSystemWatcherを使用できます)。C#の代わりにJavaを使用できますが、定期的なポーリングによってJavaを実装する必要があります。
  3. 変更が発生するたびに、サービスはファイルを取得してSQLデータベースに送信します。そこで、SELECT ExtractValue(xml)によってファイルを簡単に解析できます。データを取得したら、それらを挿入(新しいファイル)または更新(編集されたファイル)としてテーブルにコミットします。
  4. ファイルをツリーにロードする必要があるたびに、データベースで単純なSELECTステートメントを実行し、必要な構造でデータを返します。
于 2012-12-03T14:54:20.830 に答える
1

わかりました、これがあなたがする必要があることです。

  1. ファイル名と関連する XML ツリー構造データの両方を格納する SQL データベースを作成します。
    • MySQLは優れた無料のオプションです。
  2. アプリケーションの起動時に、ファイル名のディレクトリをスキャンし、データベースのファイル名のリストと比較します。
    • 索引付けされていない名前は、解析してデータベースに追加する必要があります。
    • これらのインデックス化されていないファイルを調べて処理する新しいスレッドを生成して、ユーザーに遅延が発生しないようにします。
  3. アプリケーションに「キャッシュの再作成」というボタンを含めます。
    • 「ファイルが変更されたときにのみこのボタンを押す」などの警告を残す
    • ほとんど発生しないため、古いファイルが変更されたときに、ユーザーがアプリケーションに通知できるようにします。

オプション 2/3 の代わりに、次のようにすることもできます。

  1. デーモン タスクを作成する
    • これは、データベースを維持する別のプログラムになります。
    • XML ディレクトリへの変更を監視し、データベースを適切に更新します。
    • また、他のファイルへの変更を定期的にチェックすることもできます (1 日 1 回、午前 2 時など)。
于 2012-12-03T14:44:40.883 に答える