当属性文件包含重复属性时,如何抛出异常? 这是一个证明这种情况的例子:
# 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
答案 0 :(得分:2)
我想你正在阅读Properties.load()
之类的文件。它使用put(key, value)
在内部设置参数。您可以覆盖该方法以获得所需的行为,例如。
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的代码中:
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) {
//
}
顺便问一下,你为什么要抓住这个例外?如果程序配置损坏,我不会继续执行程序(可能会在顶层捕获以记录事件)。但异常处理是一个不同的主题......
(编辑:我的原始代码samles没有编译,我纠正了它们)
答案 1 :(得分:1)
如此处所述Tool to find duplicate keys and value in properties file
” 我使用了两个不错的工具
unival npm软件包:这是一个命令行工具,用于检测重复的键,值或行。
npm命令安装软件包:npm i unival
链接:https://www.npmjs.com/package/unival
unival扩展:如果使用vscode,这是一种非常有用的扩展,可以即时检测重复项。 “
最好的方法是对运行unival命令的测试,以防止重复的值进入属性文件
答案 2 :(得分:0)
Ralf Kleberhoff的回答是正确的;
但是,我不会使用匿名类。
您似乎不止一次要使用此功能,
所以我会创建一个扩展Properties
的类并覆盖put
和Ralf一样
请注意,put方法来自Hashtable
扩展的Properties
类。
这是一个例子(我没有尝试编译它):
public class UniqueProperties
extends
Properties
{
@Override
public synchronized String put(String key, String value)
{
if (get(key) != null)
{
throw new IllegalArgumentException(key + " already present.");
}
super.put(key, value);
}
}
答案 3 :(得分:0)
以下是我加载属性的方法:
File propertiesFile = new File("D:/media/myProperties.properties");
Properties properties = new Properties();
try (BufferedInputStream bis = new BufferedInputStream(new FileInputStream(propertiesFile))) {
properties.load(bis);
} catch (Exception ex) {
//
}
@Ralf如何调整代码?