Блокировка файла для чтения даже из операционной системы, кроме одного процесса

У меня есть зашифрованный почтовый индекс с файлом внутри него. Я хочу расшифровать указанный файл и использовать путь к дешифрованному файлу в качестве входных данных для новой Java-программы.

Я не хочу, чтобы кто-нибудь читал мой расшифрованный файл и ничего с ним не делал.

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

Если я использую http://docs.oracle.com/javase/7/docs/api/java/nio/channels/FileLock.html, блокировка будет соблюдаться только на JVM, верно? Если я использую буфер обмена операционной системы, чтобы скопировать файл в другое место, он обходит мою блокировку, верно?

Кроме того, у меня есть Java-программа, которая распаковывает файл и после этого вызывает команду, которая фактически читает распакованный файл. Это означает, что я не могу заблокировать файл на JVM, я должен заблокировать его, чтобы он использовался сторонняя команда.

Какой будет лучший подход или какую тему мне гуглить?

1 ответ

Ява FileLock может быть достаточно для ваших нужд, но не работает на всех платформах. Из Javadoc:

Зависимости платформы

Этот API-интерфейс для блокировки файлов предназначен для непосредственного сопоставления с собственными средствами блокировки базовой операционной системы. Таким образом, блокировки, хранящиеся в файле, должны быть видны всем программам, которые имеют доступ к файлу, независимо от языка, на котором эти программы написаны.

То, будет ли блокировка фактически запрещать доступ другой программы к содержимому заблокированной области, зависит от системы и поэтому не определено.

Насколько большой файл? Вы должны расшифровать файл в памяти, чтобы только ваш процесс имел к нему доступ.

Другие вопросы по тегам