【问题标题】:In Java, using the java.nio library and a FileChannel, how can I load a Properties object from a file?在 Java 中,使用 java.nio 库和 FileChannel,如何从文件中加载 Properties 对象?
【发布时间】:2017-02-10 20:07:35
【问题描述】:

在 Java 程序中,我得到一个 java.nio.Path 对象,我需要锁定一个文件,然后从中加载一个 java.util.Properties 对象。

我读到获得文件共享锁的正确方法,表示为Path,是使用共享锁channel.lock(0L, Long.MAX_VALUE, true) 获得java.nio.channels.FileChannel

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

现在我已经锁定了频道,我假设我现在应该在加载属性文件时引用该频道。

但是,我看不到将FileChannel 转换为Properties 可读的简单方法。 Properties 采用 InputStreamReader。我可以实现自己的阅读器,但我确信我的团队宁愿我使用开箱即用的东西,如果有的话。

有人知道这样的事吗?

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

【问题讨论】:

  • 所有锁定和FileChannel 并发症是怎么回事?常规的属性文件读取真的很简单。
  • 我希望外部进程正在写入此文件。我不想在另一个进程正在修改它的同时尝试加载属性。
  • 似乎基于文件的通信可能不合适。

标签: java properties file-locking java.nio.file


【解决方案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));
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-03-14
    • 2019-03-14
    • 2015-01-11
    • 2016-08-09
    • 1970-01-01
    • 1970-01-01
    • 2011-02-27
    • 1970-01-01
    相关资源
    最近更新 更多