Как в Java, используя библиотеку java.nio и FileChannel, загрузить объект свойств из файла?

В программе на Java мне дан объект java.nio.Path, и мне нужно заблокировать файл, а затем загрузить из него объект java.util.Properties.

Я читал, что правильный способ получить общую блокировку для файла, представленного как Path, состоит в том, чтобы получить java.nio.channels.FileChannel блокировку с помощью общей блокировки channel.lock(0L, Long.MAX_VALUE, true).

final FileChannel channel = FileChannel.open(filePath, StandardOpenOption.READ);
final FileLock lock = channel.lock(0L, Long.MAX_VALUE, true);

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

Однако я не вижу простого способа перевести FileChannel во что-то, что читается Properties. Properties получает InputStream или Reader. Я мог бы реализовать свой собственный ридер, но я уверен, что моя команда предпочла бы, чтобы я использовал что-то готовое, если оно доступно.

Кто-нибудь знает о таком?

Является ли мое основное предположение неверным? Если да, то каков правильный поток для этой процедуры?


person ds390s    schedule 10.02.2017    source источник
comment
Что за блокировка и FileChannel сложность? Регулярное чтение файла свойств очень просто.   -  person Kayaman    schedule 10.02.2017
comment
Я ожидаю, что внешние процессы будут писать в этот файл. Я не хочу пытаться загружать свойства одновременно с их изменением другим процессом.   -  person ds390s    schedule 10.02.2017
comment
Похоже, что общение на основе файлов может быть неподходящим.   -  person Kayaman    schedule 10.02.2017


Ответы (1)


Кажется, вы пропустили существование Channels вспомогательный класс:

Properties properties=new Properties();

try(final FileChannel channel = FileChannel.open(filePath, StandardOpenOption.READ);
    final FileLock lock = channel.lock(0L, Long.MAX_VALUE, true)) {

    properties.load(Channels.newInputStream(channel));
}
person Holger    schedule 19.05.2017