Блокировка и разблокировка файлов с помощью API Java - PullRequest
4 голосов
/ 12 октября 2009

Один из наших клиентов использует программное обеспечение Novel для обеспечения безопасности, которое иногда блокирует некоторые файлы .class, которые создает наше программное обеспечение. Это вызывает некоторые неприятные проблемы для них, когда это происходит, и я пытаюсь найти обходной путь, который мы могли бы добавить к нашей обработке ошибок, чтобы решить эту проблему, когда она возникнет. Мне интересно, есть ли какие-либо вызовы в Java API, которые можно использовать, чтобы определить, заблокирован ли файл, и, если это так, разблокировать его.

Ответы [ 2 ]

1 голос
/ 12 октября 2009

Прежде чем пытаться выполнить запись в файл, вы можете проверить, доступен ли файл для записи вашим Java-приложением, используя File.canWrite () . Тем не менее, вы все еще можете столкнуться с проблемой, если стороннее приложение блокирует файл между проверкой File.canWrite () и когда ваше приложение действительно пытается записать. По этой причине я хотел бы написать ваше приложение, просто попробуйте выполнить запись в файл и отловить все исключения, возникающие при блокировке файла. Я не верю, что есть собственный способ Java, чтобы разблокировать файл, который был заблокирован другим приложением. Вы могли бы выполнить команду оболочки как привилегированный пользователь, чтобы заставить вещи идти вперед, но это кажется не элегантным.

0 голосов
/ 23 февраля 2012

File.canWrite () имеет условие гонки, упомянутое Асафом. Вы можете попробовать FileChannel.lock () и получить эксклюзивную блокировку файла. Пока .class находится на вашем локальном диске, это должно работать нормально (блокировка файлов может быть проблематичной на сетевых дисках).

Кроме того, в зависимости от того, как обнаружено имя .class, вы можете каждый раз создавать новое имя для вашего .class; затем, если антивирусное программное обеспечение блокирует ваш начальный класс, вы все равно можете создать новый.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...