Вы ловите исключение и возвращать ложь, то почему вы получаете ложными все время, сделать что-то за исключением или не поймать его, так что вы знаете, если было сгенерировано исключение, если вы ловите общее исключение и ложное возвращаемое значение не имеет смысла.
try {
lock = channel.tryLock();
// ...
} catch (OverlappingFileLockException e) {
// File is already locked in this thread or virtual machine
}
lock.release();
channel.close();
Вы камерой Расширенный просто пытаются получить доступ к файлу и поймать исключение, если это не удается:
boolean isLocked=false;
RandomAccessFile fos=null;
try {
File file = new File(filename);
if(file.exists())
fos=new RandomAccessFile(file,"rw");
}catch (FileNotFoundException e) {
isLocked = true;
}catch (SecurityException e) {
isLocked = true;
}catch (Exception e) {
// handle exception
}finally {
try {
if(fos!=null) {
fos.close();
}
}catch(Exception e) {
//handle exception
}
}
Обратите внимание, что RandomAccessFile класс бросает:
FileNotFoundException -
, если режим «r», но данная строка обозначают не существующий обычный файл, или если режим начинается с «RW» , но данная строка не обозначает существующий, перезаписываемый регулярный файл и новый регулярный файл с таким именем не может быть создан, или если какой-то возникает другая ошибка при открытии или создании файла.
SecurityException -
если менеджер безопасности существует и checkRead метод отрицает доступ для чтения к файлу или режим «RW» и метод checkWrite менеджера охранной отрицает доступ для записи в файл
Что не работает? Какой результат вы получите от кода, который вы указали здесь? Какой результат вы ожидаете? –
Я всегда могу заблокировать файл, даже если файл написан! –
Ваш код не имеет смысла. Единственный раз, когда вы возвращаете true, является то, что 'FileChannel.lock()' возвращает 'null ', что он никогда не сможет сделать. Вы также просачиваете канал в этом случае, но это никогда не может произойти. Если вам удалось получить блокировку, это означает, что никто другой не заблокировал ее: наверняка вы хотите вернуть «истину» в этом случае? – EJP