2

Java の java.nio.file.Files.walkFileTree() は、ファイルが存在しない (最近削除されたファイル) 場合でも、訪問者の visitFile() メソッドを実行します。

FileUtils.forceDelete(certainFile);
Files.exists(certainFile.toPath()); // Returns false, as expected
MySimpleFileVisitor visitor = new MySimpleFileVisitor(); // Extends SimpleFileVisitor. All it does is override visitFile() so I can see that it visits the deleted file.
Files.walkFileTree(directory, visitor); // Calls visitor.visitFile on certainFile. Not expected!

これは可能ですか?Windows を使用しており、ファイルはネットワーク ドライブにあります。

Files.walkFileTree() は FileTreeWalker.walk() を呼び出し、FileTreeWalker.walk() は Files.newDirectoryStream() を呼び出します。私が考えることができる唯一の説明は、 Files.newDirectoryStream が削除されたファイルを含む DirectoryStream を返すということです。

4

2 に答える 2

4

はい、可能です。私の場合、失敗を再現するには、次の条件を満たす必要がありました。

  1. 対象のファイルは、Windows によってインデックスが作成されたフォルダーに存在します。
  2. ファイルの種類には、それに関連付けられたWindows プロパティ ハンドラーがあります。
  3. Windows では、ファイルが削除される前に、ファイルのインデックス作成を開始する時間があります。
  4. プロパティ ハンドラーは、ファイルの保持を解放するのに長い時間 (数分) かかります。

この情報をすべて発見したので、元の質問で言及されていません。

于 2014-08-27T17:37:29.753 に答える
4
于 2014-08-23T13:29:05.333 に答える