0

ディレクトリ内のファイルを一覧表示するときに奇妙な動作に気付きました。私の状況では、データベースに保存するtxtファイルのリストがあり、それらのデータファイルに対応して、dbのメタプロパティとして関連付けられている各txtのタグを含むxmlファイルがあります。

ディレクトリからファイルを一覧表示し、xml ファイルを読み取ると、ストリームがどのように変化し、既に db に追加されているファイルが再度一覧表示されます。ファイル名はデータベース内の ID であり、一意です。それらを再リストすると、主キーの制約に違反します。

リスティングが乱れる理由を知りたいですか?

try (DirectoryStream<Path> directoryStream = Files.newDirectoryStream(folderReader,filter){
    for (Path file : directoryStream) {
         // Read XML
         // add txt file to database
         // attach meta props to that file
    }
    }catch(IOException ex){}

現在、一部のファイルでは正常に動作しますが、すでにリストされているファイルが再び戻ってくることがあります。同様に 1.txt が処理されて db に保存されましたが、後のループで再びリストされます。

4

1 に答える 1

1

あなたの最後のコメントは、ここで何が起こっているかを正確に説明しているようです。

DirectoryStream以前のリストをチェックせずに、新しく保存されたファイルを追加する (または追加しない)と思います。

DirectoryStreamこの場合、エントリを別のエントリIterableまたは別のエントリに追加することをお勧めしますSet(例: HashSet) それらを処理する前に、それらがSet前にあったかどうかを確認することをお勧めします (Set#addその理由で return のブール値)。

于 2014-06-10T08:41:04.917 に答える