0

ルートフォルダがあり、そこにはいくつかのサブディレクトリがあり、各サブディレクトリにはxmlファイルのみが含まれています(他のディレクトリは含まれていません)。追加された最新のファイルを返すプログラムを作成する必要があります(すべてのサブディレクトリ)をftpサブスクライバに送信できるようにします。

それを行うための最良の方法は何ですか?

1つのディレクトリを調べてそのすべてのファイルを並べ替えることはできますが、複数のサブディレクトリに対してそれを行う方法がわかりません。最新のファイルのみが必要です。すべてのファイルを返すと、プログラムの速度が低下します。 。

また、このプログラムを定期的に実行する必要があります。これをメソッド自体に含める必要がありますか、それともそのための他のクラスを作成する必要がありますか?

4

6 に答える 6

1

ここには多くの質問があります:

まず、ディレクトリツリーのトラバーサルについて。1 つのディレクトリを読み取ることができれば、それらのいずれかを読み取ることができます。ファイルのディレクトリ リストを読み取る何らかの反復または再帰機能が必要になります。ディレクトリ自体であるファイルごとに、それを新しいルートとして使用して関数を再度呼び出します。そのために、 File クラスに isDirectory() メソッドがあります。

新しいファイルの認識に関しては、(以前に実行したプログラムの) 古い値を保持し、それらを新しい値と比較する必要があります。または、ファイルの変更時刻に依存して、最終実行時刻と比較することもできます。この日付より新しいファイルはすべて、最後の実行後に変更された新しいファイルまたは古いファイルになります。

定期的に実行するかどうかは状況によります。serviceWrapper を使用してオペレーティング システム サービスとして設定するか、コンテナー内で実行するか、スタンドアロンとして実行して、この関数を定期的に呼び出すことができます。選択肢が多すぎて情報が少なすぎて、最適なものを提案することすらできません。しかし、それでも、それはそのようなものになります。

于 2012-08-23T16:43:41.880 に答える
1

定期的に確認する代わりに、新しい nio Watch サービス API を使用して、ディレクトリのコンテンツが変更されたときに通知を受け取ることができます。これは、低レベルのシステム通知 API を使用するため効率的です。

Oracle ドキュメント : http://docs.oracle.com/javase/tutorial/essential/io/notification.html

于 2012-08-23T16:37:11.663 に答える
0

1.ファイルのリストを取得する方法は、 を使用することFile.listFiles()です。

2.Comparatorを使用する a を記述し、File.lastModified()これをファイルの配列とともに に渡しますArrays.sort()

3.Thread一定の遅延後にこの変更をチェックし続ける を作成します....

于 2012-08-23T17:03:17.933 に答える
0

Apache Camel を使用してアプリケーションを実装することをお勧めします。あなたのような要求のために正確に作られています。概要については、 http://camel.apache.org/を参照してください。

基本的に、Spring DSL または純粋な Java を使用してルートを定義し、それらのメッセージに作用できる 1 つまたは複数のエンドポイントにメッセージをルーティングします。たとえば、ローカル フォルダーからファイルをフェッチし、ファイルが表示されるとすぐに FTP にプッシュするのはワンライナーです。スレッド化、Java IO のいじり、または本当に気にしたくないその他のことを行う必要はありません。

from("file://inputdir/?recursive=true&delete=false").to("ftp://user@host../folder/?password=xyz");
于 2012-08-23T17:03:22.637 に答える
0

FileMonitor または jnotifyが必要なようです。

于 2012-08-23T17:43:15.707 に答える
0

さて、私は何をするでしょうか...

最初に、現在のタイムスタンプをファイルに保存します。これは、次回の呼び出しで読み取られます。これにより、プログラムが最後に実行された時期がプログラムに通知されます。

タイムスタンプを読み取り、次のファイルのみを含めます。

file.lastModified() > lastTimeStampOfRunそしてそれらを返します。

すべてのファイルとディレクトリをスキャンするには、単純に Java IO を使用できます。

于 2012-08-23T16:38:58.303 に答える