La documentazione di DirectoryStream afferma chiaramente:Iterazione un DirectoryStream e cambiare il contenuto di una directory, allo stesso tempo
L'iteratore è debolmente coerente. È thread-safe ma non blocca la directory durante l'iterazione, quindi può (o non può) riflettere gli aggiornamenti nella directory che si verificano dopo che DirectoryStream è creato.
Sulla mia macchina, ho eseguito una semplice iterazione su una directory in modalità di debug. Prima che l'iterazione fosse completata, ho interrotto l'esecuzione, aggiunto un file alla directory che è stata ripetuta e ripresa. L'iterazione non ha visto il file supplementare.
La mia domanda: in quale circostanza sarà l'iterazione riflette gli aggiornamenti ai contenuti della directory? Sfortunatamente la documentazione formale è molto vaga a riguardo. Per non dire altro.
Non so, ma il modo in cui l'ho letto non è deterministico e può dipendere dal SO/FS sottostante o dalle implementazioni specifiche. La mia ipotesi migliore è che rifletterà gli aggiornamenti se la tua directory si trova su un inode che si trova più avanti nella struttura dell'albero rispetto a quello corrente che l'iteratore sta puntando. Come provocare questo comportamento non lo so. Sono fiducioso nel dire che non è immediatamente possibile (in modo deterministico) l'utilizzo di Java puro. –