NullPointerException
s - исключения, возникающие при попытке использовать ссылку, которая указывает на отсутствие местоположения в памяти (null), как если бы она ссылалась на объект. Вызов метода по нулевой ссылке или попытка получить доступ к полю нулевой ссылки вызовет функцию NullPointerException
. Они наиболее распространены, но другие способы перечислены на странице NullPointerException
javadoc.
Вероятно, самый быстрый пример кода, который я мог бы придумать для иллюстрации NullPointerException
, be:
public class Example {
public static void main(String[] args) {
Object obj = null;
obj.hashCode();
}
}
В первой строке внутри main
я явно устанавливаю ссылку Object
obj
равной null
. Это означает, что у меня есть ссылка, но она не указывает на какой-либо объект. После этого я пытаюсь обработать ссылку так, как если бы она указывала на объект, вызывая метод на нем. Это приводит к NullPointerException
, потому что нет кода для выполнения в местоположении, на которое указывает ссылка.
(Это техничность, но я думаю, что она упоминает: ссылка, которая указывает на null, равна 't то же, что и указатель C, указывающий на недопустимую ячейку памяти. Нулевой указатель буквально не указывает на в любом месте , который отличается от указаний на местоположение, которое оказывается недопустимым.)
FileChannel.lock, вероятно, что Вы хотите.
FileInputStream in = new FileInputStream(file);
try {
java.nio.channels.FileLock lock = in.getChannel().lock();
try {
Reader reader = new InputStreamReader(in, charset);
...
} finally {
lock.release();
}
} finally {
in.close();
}
(Правовая оговорка: Код, не скомпилированный и конечно не протестированный.)
Примечание раздел, наделенный правом "зависимости от платформы" в документ API для FileLock.
Вы использование java.nio.* API для блокировки файла. Однако это не гарантирует блокировку, Она зависит от если базовая блокировка поддержек ОС или нет. <забастовка>, Поскольку я понимаю Операционные системы как Linux doens't блокировка поддержки и следовательно Вы не можете заблокировать даже при использовании этих API забастовка>
Если можно использовать Java NIO ( JDK 1.4 или больше ), то я думаю, что Вы ищете java.nio.channels.FileChannel.lock()
используйте java.nio.channels. FileLock в сочетании с java.nio.channels. FileChannel
Это не может быть тем, что Вы ищете, но в интересах прибытия в проблему от другого угла....
эти два процесса Java, которые могли бы хотеть получить доступ к тому же файлу в том же приложении? Возможно, можно ли просто отфильтровать весь доступ к файлу через единственный, синхронизированный метод (или, еще лучше, с помощью JSR-166)? Тем путем можно управлять доступом к файлу, и возможно даже запросами доступа очереди.
Используйте RandomAccessFile, доберитесь, это - канал, затем назовите блокировку (). Канал, обеспеченный потоками ввода или вывода, не имеет необходимых полномочий для блокировки правильно. Обязательно звоните, разблокировали () в наконец блок (закрывающий файл, не обязательно выпускает блокировку).