6

多くの場合、ファイルの変更をポーリングしたいパターンです(最後に書き込まれたとき)。ファイルが以前の値から変更されたときに、何らかの機能を実行したいと思います。形の何か。

(poll-for-changes file-str on-change-fx current-value)

どこ

  1. file-strファイルの場所を指定する単なる文字列です
  2. on-change-fxfile-strは、ファイルが変更されたときに呼び出す必要のある関数です。引数としてon-change-fx指すFileオブジェクトを取る必要があるとしましょう。file-str
  3. current-valueファイルの現在の値(ミリ秒単位)。この関数が少なくとも1回実行されることを保証するために0に設定するか、実際に変更を検出したときにのみこの関数を実行するために実際の値に設定することができます。

この関数を、可能な限り明確で、最も簡潔な、Clojuristの方法で実装したいと思います。ありがとうございました。

4

3 に答える 3

5

ここで使用できるアプローチは2つあります。

  1. Java相互運用機能とJava7APIを使用WatchServiceます

  2. あなたが望むようなことをする既存の慣用的で簡潔なコード(この場合はStuart Sierraによる)を調べて学びましょう。Java相互運用機能も使用していることに注意してください。

オプション#1が最善の策であり、関数の実装は簡単である必要があると思います。コードを読みやすくするためにdoto->andマクロを使用することをお勧めします。->>

于 2012-10-18T02:11:54.270 に答える
5

watchtower1つまたは複数のディレクトリをポーリングしてそれに基づいて行動することを検討している場合は、かなり良いと思います。

Java 7にはWatchServiceがあり、ファイルシステムイベントを使用して変更に対応します。この場合、ポーリングはまったく行いませんが、将来のファイルイベントをブロックします。Clojureには、それを活用しているプロジェクトはないと思いますが、小さなライブラリを作成するために時間をかけていじっていました。そのソースはここにあります

私のライブラリが完全であるとは言いませんが、Java 7サービスを使用しているので、自分のプロジェクトのインスピレーションにそれを使用できます。

于 2012-10-18T13:34:49.030 に答える
1

今日はおそらくhara.io.watch最初に試してみます。

それ以外の場合は、多くの選択肢があります(haraドキュメントに記載されています):

そして、いくつかのコードはから抽出することができます:

また、 java.nio.file.WatchServiceharaを実行してラップすることもできます。

于 2016-03-17T13:39:30.987 に答える