В Windows с Sun JVM FileLocks должны работать должным образом, хотя JavaDocs оставляют надежность довольно неопределенной (зависит от системы).
Тем не менее, если вам нужно только признать в своей Java-программе, что какая-то другая программа блокирует файл, вам не нужно бороться с FileLocks, но вы можете просто попытаться записать в файл , который потерпит неудачу, если он заблокирован. Вам лучше попробовать это на вашей реальной системе, но я вижу следующее поведение:
File f = new File("some-locked-file.txt");
System.out.println(f.canWrite()); // -> true
new FileOutputStream(f); // -> throws a FileNotFoundException
Это довольно странно, но если вы не учитываете слишком высокую независимость от платформы и ваша система демонстрирует такое же поведение, вы можете объединить это в служебную функцию.
С текущими версиями Java, к сожалению, нет способа получить информацию об изменениях состояния файла, поэтому, если вам нужно подождать, пока файл не будет записан, вы должны время от времени пытаться проверить, не был ли запущен другой процесс. его замок. Я не уверен, но с Java 7 можно было бы использовать новый WatchService, чтобы получать информацию о таких изменениях.