首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在属性文件中复制属性时抛出异常

在属性文件中复制属性时抛出异常
EN

Stack Overflow用户
提问于 2017-09-29 18:53:01
回答 4查看 1.2K关注 0票数 0

当属性文件包含重复属性时,如何抛出异常?下面是一个例子,说明了这种情况:

代码语言:javascript
复制
# Properties-file

directory=D:\\media\\D-Downloads\\Errorfile\\TEST_A
directory=D:\\media\\D-Downloads\\Errorfile\\TEST_B
#directory=D:\\media\\D-Downloads\\Errorfile\\TEST_C
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2017-09-29 19:07:08

我想您是用类似于Properties.load()的东西读取文件的。它使用put(key, value)在内部设置参数。您可以重写该方法以获得所需的行为,例如。

代码语言:javascript
复制
new Properties() {
    @Override
    public synchronized Object put(Object key, Object value) {
        if (get(key) != null) {
            throw new IllegalArgumentException(key + " already present.");
        }
        return super.put(key, value);
    }
}.load(...);

编辑:

将其集成到OP的代码中:

代码语言:javascript
复制
File propertiesFile = new File("D:/media/myProperties.properties");
Properties properties = new Properties() {
    @Override
    public synchronized Object put(Object key, Object value) {
        if (get(key) != null) {
            // or some other RuntimeException you like better...
            throw new IllegalArgumentException(key + " already present.");
        }
        return super.put(key, value);
    }
}
try (BufferedInputStream bis = new BufferedInputStream(new FileInputStream(propertiesFile))) {
  properties.load(bis);

} catch (IllegalArgumentException ex) {
  //
}

顺便问一下,你为什么要抓住这个例外呢?如果程序的配置已损坏,我将不会继续它(可能在顶层捕获以记录事件)。但异常处理是另一个主题.

(编辑:我的原始代码样本没有编译,我更正了它们)

票数 3
EN

Stack Overflow用户

发布于 2020-10-16 23:05:34

如前所述,Tool to find duplicate keys and value in properties file

“我用了两种很好的工具

unival包:这是一个用于检测重复键、值或行的命令行工具。

安装软件包的npm命令: npm

链接:https://www.npmjs.com/package/unival

unival扩展:如果您使用vscode,这是一个非常有用的扩展,可以动态检测副本。“

最好的方法是有一个运行unival命令的测试,这将防止重复的值进入属性文件。

票数 1
EN

Stack Overflow用户

发布于 2017-09-29 19:20:12

的答案是正确的;但是,我不会使用匿名类。您似乎希望不止一次地使用此功能,因此我将创建一个类,它扩展Properties并覆盖put,就像Ralf一样。

注意,put方法来自Hashtable类,Properties对该类进行了扩展。

下面是一个示例(我没有试图编译它):

代码语言:javascript
复制
public class UniqueProperties extends Properties
{
    @Override
    public synchronized String put(Object key, Object value)
    {
        if (get(key) != null)
        {
            throw new IllegalArgumentException(key + " already present.");
        }

        super.put(key, value);
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46495287

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档