Sto riscontrando un problema ricorrente in un'applicazione che tiene traccia del contenuto dei file all'interno di una directory, in base all'API Java 7 WatchService. Quando il file system sottostante attiva un evento di modifica su un file, voglio calcolare immediatamente il suo SHA-256.I/O Java: assicurarsi che un file non sia bloccato da un altro processo prima di qualsiasi operazione di r/w
Ma spesso si verifica che un altro processo abbia il file aperto (ad esempio Word), trattenendo così un blocco esclusivo e impedendo alla mia app di eseguire operazioni di lettura/scrittura. Se una qualsiasi stream/canale è stato creato contro il file aperto, un FileNotFoundException o un FileSystemException per NIO API è gettato con un messaggio del tipo:
Il processo non può accedere al file perché è utilizzato da un altro processo
Non sono riuscito a venire con una soluzione in grado di rilevare tali casi senza mascherare una "reale" FileNotFoundException quando il file non esiste effettivamente sul file.
Mi è venuta l'idea di controllare l'esistenza tramite File.exists e quindi se viene generata un'eccezione FileNotFoundException quando apro un flusso, sarei in grado di dedurre che il file è bloccato. Sono aperto a qualsiasi input su questo!
Grazie!
mai trovare una soluzione a questo? –
Ho finito per usare l'euristica menzionata, se File.exists restituisce true nel blocco catch di FileNotFoundException, lo interpreto come un file bloccato. – sylvain