0

Linux ファイル システム上で実行されているモジュールに、リモート Windows 共有内の新しいファイルが通知される必要があるユース ケースがあります。

このための組み込み機能はありますか?基本的なグーグル検索を行ったところ、ファイルウォッチャー (C# のファイルシステムウォッチャー) のようなものを見つけました。

Java 6に役立ちますか? ファイルが表示されたときにファイルをダウンロードする必要がある FTP 呼び出しがいかに簡単で効率的であるか。

ありがとう。

4

1 に答える 1

2

Java 7の時点でファイルウォッチャーがあります。これに関するトレイルについては、こちらを参照してください。これがリモートの Windows 共有で機能するかどうかはわからないので、少し試してみる価値があるかもしれません。

Java 7 を使用できない場合は、ScheduledExecutor (Java 5 以降) を使用して x 秒ごとにリモート ディレクトリを手動でチェックする価値があります。

編集

あなたが提案したライブラリにJava 7が必要かどうかはわかりません。スキャンするものを書くのはそれほど難しいことではないので、単体テスト用に以下に記述しました。私はそれをテストしていないので、いくつかのバグがあるかもしれませんが、ほとんどあるはずです。基本的に毎秒ディレクトリをスキャンし、追加または削除された sysout ファイルに出力します。指定したディレクトリとすべてのサブディレクトリをチェックします。

public void test() {
    ScheduledExecutorService ex = Executors.newSingleThreadScheduledExecutor();
        ex.scheduleAtFixedRate(new Runnable(){
    @Override
    public void run() {
        scanDirectory(new File("."));
    }}, 1, 1, TimeUnit.SECONDS);
}

private void scanDirectory(File directory) {
    Set<File> before = new HashSet<File>();
    Set<File> after = new HashSet<File>();
    addFiles(directory, after);

   for (File f :after) {
      if (!before.contains(f)) {
         System.out.format("new file added %s", f);     
      }
   }
   for (File f :before) {
        if (!after.contains(f)) {
            System.out.format("file removed %s", f);    
        }
    }

    before.clear();
    before.addAll(after);
}

private void addFiles(File file, Collection<File> allFiles) {
    File[] files = file.listFiles();
    if (files != null) {
        for (File f : files) {
            allFiles.add(f);
            addFiles(f, allFiles);
        }
    }
}
于 2012-09-05T18:33:43.437 に答える