Предпосылки:
Я пытаюсь заблокировать файл в статической функции, Функция возвращает составной объект, содержащий канал и блокировку, поэтому можно использовать другую функцию, unlockFile (FileLocking fl), чтобы закрыть, затем канал и снять блокировку. Составной объектный класс выглядит так: `
public class FileLocking {
public FileChannel channel;
public FileLock lock;
public FileLocking(FileChannel f, FileLock l) {
channel = f;
lock = l;
}
Функция, которая блокирует файл, выглядит так:
public static synchronized FileLocking lockFile(String fileName) {
FileLocking result = null;
FileChannel channel = null;
try {
channel = new FileOutputStream(fileName).getChannel();
FileLock lock = channel.lock();
lock = channel.tryLock();
result = new FileLocking(channel, lock);
} catch (Exception e) {
Log(ERR, "Exception when locking " + e.getMessage());
e.printStackTrace();
} finally {
try {
channel.close();
} catch (IOException e) {
Log(ERR, "IOE: " + e.getMessage());
e.printStackTrace();
}
}
return result;
}
В настоящее время я получаю следующую ошибку:
[ERR]: (pid:13) Exception when locking null
java.nio.channels.OverlappingFileLockException
at sun.nio.ch.FileChannelImpl$SharedFileLockTable.checkList(Unknown Source)
at sun.nio.ch.FileChannelImpl$SharedFileLockTable.add(Unknown Source)
at sun.nio.ch.FileChannelImpl.tryLock(Unknown Source)
at java.nio.channels.FileChannel.tryLock(Unknown Source)
at com.xxx.utils.FileLocking.lockFile(FileLocking.java:29)`
Пояснения и / или методы кодирования приветствуются.