Immaginavo che non fosse un tuo applicativo a scrivere i file... quindi ti rimangono 2 strade:
1) La coda tentativi (brutta e poco applicabile)
2) La tecnologia NIO, che ti spiego qui sotto.
Tramite tecnologia NIO puoi cercare di acquisire un lock esclusivo su un file (su un FileChannel, per la verità).
Se riesci ad acquisire il lock, allora:
1) Il file c'è (ovvio, hai un FileChannel)
2) Hai i permessi per manipolarlo
3) Nessuno sta usando quel file
4) Nessuno lo userà finchè tu ne detieni il lock
Questo è garanzia del fatto che puoi leggere il file. Se non riesci ad acquisirne il lock, allora qualcosa non va bene e non puoi usare quel file.
Qui un abbozzo (non provato) di come procedere:
codice:
File f = ... // E' il file che devo provare a leggere
// Apro il file in lettura (già qui, se ho un'eccezione, so che non devo procedere oltre)
FileInputStream fis = new FileInputStream( f );
// Ottengo il FileChannel
FileChannel channel = fis.getChannel();
// Provo ad acquisire il lock sul file
FileLock lock = channel.tryLock();
if (lock != null) {
// Ho ottenuto il lock, posso lavorare col file
...
// Ho finito di lavorare col file, rimuovo il lock
lock.release();
...
} else {
// Non ho ottenuto il lock, qualcun altro sta usando il file...
}
Sul cosa fare in caso di eccezioni e/o lock non acquisiti, a te la scelta.
Ciao.