How can I throw an Exception when a properties file contains a duplicate property? Here is an example demonstrating this situation:
JavaScript
x
# 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
Advertisement
Answer
I suppose you are reading the file with something like Properties.load()
. It sets the parameter internally using put(key, value)
. You can override that method to get the desired behaviour like e.g.
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( );
EDIT:
Integrating this into the OP’s code:
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) {
//
}
By the way, why would you want to catch the exception? I’d not continue a program if its configuration is corrupt (maybe catching at top-level to log the event). But exception-handling is a different topic…
(EDIT: my original code samles didn’t compile, I corrected them)