Как я могу заблокировать файл с помощью Java (если возможный)

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, указывающий на недопустимую ячейку памяти. Нулевой указатель буквально не указывает на в любом месте , который отличается от указаний на местоположение, которое оказывается недопустимым.)

113
задан Null 27 July 2015 в 17:30
поделиться

6 ответов

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.

110
ответ дан Tom Hawtin - tackline 24 November 2019 в 02:43
поделиться

Вы использование java.nio.* API для блокировки файла. Однако это не гарантирует блокировку, Она зависит от если базовая блокировка поддержек ОС или нет. <забастовка>, Поскольку я понимаю Операционные системы как Linux doens't блокировка поддержки и следовательно Вы не можете заблокировать даже при использовании этих API

-5
ответ дан Anony-Mousse 3 July 2019 в 05:26
поделиться

Если можно использовать Java NIO ( JDK 1.4 или больше ), то я думаю, что Вы ищете java.nio.channels.FileChannel.lock()

FileChannel.lock ()

16
ответ дан roottraveller 24 November 2019 в 02:43
поделиться

используйте java.nio.channels. FileLock в сочетании с java.nio.channels. FileChannel

6
ответ дан Matt 24 November 2019 в 02:43
поделиться

Это не может быть тем, что Вы ищете, но в интересах прибытия в проблему от другого угла....

эти два процесса Java, которые могли бы хотеть получить доступ к тому же файлу в том же приложении? Возможно, можно ли просто отфильтровать весь доступ к файлу через единственный, синхронизированный метод (или, еще лучше, с помощью JSR-166)? Тем путем можно управлять доступом к файлу, и возможно даже запросами доступа очереди.

5
ответ дан pkaeding 24 November 2019 в 02:43
поделиться

Используйте RandomAccessFile, доберитесь, это - канал, затем назовите блокировку (). Канал, обеспеченный потоками ввода или вывода, не имеет необходимых полномочий для блокировки правильно. Обязательно звоните, разблокировали () в наконец блок (закрывающий файл, не обязательно выпускает блокировку).

3
ответ дан Kevin Day 24 November 2019 в 02:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: