2017-02-10 31 views
1

在一个Java程序中,我得到了一个java.nio.Path对象,我需要锁定一个文件,然后从中加载一个java.util.Properties对象。在Java中,使用java.nio库和FileChannel,如何从文件加载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需要InputStreamReader。我可以实现自己的读者,但是我确信我的团队宁愿使用开箱即用的东西(如果有的话)。

有没有人知道这样的事情?

我的基本假设是否不正确?如果是这样,这个程序的正确流程是什么?

+0

什么跟所有的锁定和'FileChannel'并发症?定期的属性文件阅读非常简单。 – Kayaman

+0

我希望外部进程可以写入这个文件。我不想在另一个进程正在修改它的同时加载属性。 – ds390s

+0

似乎基于文件的通信可能不太合适。 – Kayaman

回答

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)); 
} 
相关问题