In Windows con JVM di Sun, i FileLock dovrebbero funzionare correttamente, sebbene i JavaDocs lascino l'affidabilità piuttosto vaga (dipendente dal sistema).
Tuttavia, se si dispone solo di riconoscere nel programma Java, che qualche altro programma sta chiudendo il file, non c'è bisogno di lottare con FileLocks, ma può semplicemente provare a scrivere sul file, che sarà fallire se è bloccato. È meglio provare questo sul sistema attuale, ma vedo il seguente comportamento:
File f = new File("some-locked-file.txt");
System.out.println(f.canWrite()); // -> true
new FileOutputStream(f); // -> throws a FileNotFoundException
Questo è piuttosto strano, ma se non si contano l'indipendenza dalla piattaforma troppo alto e il sistema mostra lo stesso comportamento, si può mettere questo insieme in una funzione di utilità.
Con le attuali versioni Java, purtroppo non c'è modo di essere informati sulle modifiche allo stato dei file, quindi se è necessario attendere fino a quando il file può essere scritto, è necessario provare ogni tanto per verificare se l'altro processo ha ha rilasciato la sua serratura. Non sono sicuro, ma con Java 7, potrebbe essere possibile utilizzare il nuovo WatchService per essere informato su tali cambiamenti.
Vedi anche: http://stackoverflow.com/questions/713550/concurrent-file-write-in -java-on-windows – erickson
Vedere anche: http://stackoverflow.com/questions/122282/can-the-java-file-method-canwrite-support-locking – erickson