2012-04-10 3 views
0

Я хочу заблокировать свой текстовый файл ввода, в моей программе, поэтому, если следующее появление программы запущено в том же файле, оно вызывает сбои (генерирует исключение). Я знаю, что могу заблокировать файл с помощью «java.nio.channels.FileLock», но это возможно, только если файл открыт для записи, и я открываю текстовый файл только для чтения. Я не хочу использовать «RandomAccessFile» для чтения файла, потому что он слишком медленный, а размер файла очень большой (10gb). Теперь я использую этот WY для чтения моего файла:Как заблокировать, текстовый файл открыт для чтения?

FileInputStream fstream = new FileInputStream(this.inputFileName); 
DataInputStream in = new DataInputStream(fstream); 
BufferedReader br = new BufferedReader(new InputStreamReader(in)); 

Я думаю, что это быстрый способ чтения текстового файла. Как заблокировать мой текстовый файл?

+1

Посмотрите эту тему. http://stackoverflow.com/questions/128038/how-can-i-lock-a-file-using-java-if-possible – Arash

+0

Спасибо за решение. – PapaSmurf

+0

Я нашел решение на этом [link] [1]. [1]: http://stackoverflow.com/questions/128038/how-can-i-lock-a-file-using-java-if-possible – PapaSmurf

ответ

0

Я знаю, что я могу заблокировать файл с «java.nio.channels.FileLock», но это возможно, только если файл открыт для записи,

AFAIK, это неверно.

Вы можете приобрести FileLock в файле или области файла, который вы открыли для чтения. Уловка заключается в том, что это гарантировано только для того, чтобы другое приложение Java не получало перекрывающийся FileLock. Если другое приложение не пытается получить блокировку, тогда может иметь возможность читать файл в любом случае. (Точная семантика зависит от платформы.)