Проверьте, заблокирован ли файл в Java

По-моему, использование потоков для этого является излишним. Вы можете убедиться, что файл сохранен правильно, просто выполнив его в цикле до тех пор, пока не будет выполнена успешная запись:

def saveToFile(obj, filename):
    file = open(filename, 'w')
    cPickle.dump(obj, file)
    file.close()
    return True

done = False
while not done:
    try:
        done = saveToFile(obj, 'file')
    except KeyboardInterrupt:
        print 'retry'
        continue
23
задан Nathan 2 November 2016 в 19:15
поделиться

3 ответа

Under Windows with Sun's JVM, the FileLocks should work properly, although the JavaDocs leave the reliability rather vague (system dependent).

Nevertheless, if you only have to recognize in your Java program, that some other program is locking the file, you don't have to struggle with FileLocks, but can simply try to write to the file, which will fail if it is locked. You better try this on your actual system, but I see the following behaviour:

File f = new File("some-locked-file.txt");
System.out.println(f.canWrite()); // -> true
new FileOutputStream(f); // -> throws a FileNotFoundException

This is rather odd, but if you don't count platform independence too high and your system shows the same behaviour, you can put this together in a utility function.

With current Java versions, there is unfortunately no way to be informed about file state changes, so if you need to wait until the file can be written, you have to try every now and then to check if the other process has released its lock. I'm not sure, but with Java 7, it might be possible to use the new WatchService to be informed about such changes.

14
ответ дан 28 November 2019 в 18:31
поделиться

Используйте FileLock во всех приложениях Java, использующих этот файл, и пусть они запускаются в одной JVM. В противном случае это невозможно сделать надежно.

5
ответ дан 28 November 2019 в 18:31
поделиться

Если несколько процессов (которые могут быть как Java, так и не-Java) могут использовать файл, используйте FileLock . Ключ к успешному использованию блокировок файлов - помнить, что они являются только «рекомендательными». Блокировка гарантированно будет видна, если вы ее проверите, но она не помешает вам делать что-то с файлом, если вы забудете. Все процессы, которые обращаются к файлу, должны быть разработаны для использования протокола блокировки.

2
ответ дан 28 November 2019 в 18:31
поделиться
Другие вопросы по тегам:

Похожие вопросы: