Блокировка файла для чтения даже из операционной системы, кроме одного процесса
У меня есть зашифрованный почтовый индекс с файлом внутри него. Я хочу расшифровать указанный файл и использовать путь к дешифрованному файлу в качестве входных данных для новой Java-программы.
Я не хочу, чтобы кто-нибудь читал мой расшифрованный файл и ничего с ним не делал.
Лучшее решение, которое я нашел, - это несколько разных процессов, отслеживающих папку, в которую я распаковал мой zip, чтобы проверить, читает ли кто-нибудь файл или копирует в другое место.
Если я использую http://docs.oracle.com/javase/7/docs/api/java/nio/channels/FileLock.html, блокировка будет соблюдаться только на JVM, верно? Если я использую буфер обмена операционной системы, чтобы скопировать файл в другое место, он обходит мою блокировку, верно?
Кроме того, у меня есть Java-программа, которая распаковывает файл и после этого вызывает команду, которая фактически читает распакованный файл. Это означает, что я не могу заблокировать файл на JVM, я должен заблокировать его, чтобы он использовался сторонняя команда.
Какой будет лучший подход или какую тему мне гуглить?
1 ответ
Ява FileLock
может быть достаточно для ваших нужд, но не работает на всех платформах. Из Javadoc:
Зависимости платформы
Этот API-интерфейс для блокировки файлов предназначен для непосредственного сопоставления с собственными средствами блокировки базовой операционной системы. Таким образом, блокировки, хранящиеся в файле, должны быть видны всем программам, которые имеют доступ к файлу, независимо от языка, на котором эти программы написаны.
То, будет ли блокировка фактически запрещать доступ другой программы к содержимому заблокированной области, зависит от системы и поэтому не определено.
Насколько большой файл? Вы должны расшифровать файл в памяти, чтобы только ваш процесс имел к нему доступ.