当属性文件包含重复属性时,如何抛出异常?下面是一个例子,说明了这种情况:
# 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发布于 2017-09-29 19:07:08
我想您是用类似于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) {
//
}顺便问一下,你为什么要抓住这个例外呢?如果程序的配置已损坏,我将不会继续它(可能在顶层捕获以记录事件)。但异常处理是另一个主题.
(编辑:我的原始代码样本没有编译,我更正了它们)
发布于 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命令的测试,这将防止重复的值进入属性文件。
发布于 2017-09-29 19:20:12
的答案是正确的;但是,我不会使用匿名类。您似乎希望不止一次地使用此功能,因此我将创建一个类,它扩展Properties并覆盖put,就像Ralf一样。
注意,put方法来自Hashtable类,Properties对该类进行了扩展。
下面是一个示例(我没有试图编译它):
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);
}
}https://stackoverflow.com/questions/46495287
复制相似问题