public class FormatPreservingProperties extends Properties
Properties
that stores its contents
in the same order and with the same formatting as was used to read
the contents from an input stream. This is useful because it means
that a properties file loaded via this object and then written
back out later on will only be different where changes or
additions were made.
By default, the store(java.io.OutputStream, java.lang.String)
method in this class does not
behave the same as Properties.store(java.io.Writer, java.lang.String)
. You can cause an
instance to approximate the behavior of Properties.store(java.io.Writer, java.lang.String)
by invoking setDefaultEntryDelimiter(char)
with =
,
setAddWhitespaceAfterDelimiter(boolean)
with false
, and
setAllowDuplicates(boolean)
with true
. However, this
will only influence how the instance will write new values, not how
it will write existing key-value pairs that are modified.
In conjunction with a conservative output writer, it is
possible to only write to disk changes / additions.
This implementation does not permit escaped ' ', '=', ':'
characters in key names.Modifier and Type | Class and Description |
---|---|
static class |
FormatPreservingProperties.DuplicateKeyException |
defaults
Constructor and Description |
---|
FormatPreservingProperties() |
FormatPreservingProperties(Properties defaults) |
Modifier and Type | Method and Description |
---|---|
void |
clear() |
Object |
clone() |
boolean |
getAddWhitespaceAfterDelimiter()
If set to
true , this properties object will add a
space after the delimiter character(if the delimiter is not
the space character). |
boolean |
getAllowDuplicates()
If set to
true , duplicate properties are allowed, and
the last property setting in the input will overwrite any previous
settings. |
char |
getDefaultEntryDelimiter()
|
boolean |
getInsertTimestamp()
If set to
true , this properties object will add a
timestamp to the beginning of the file, just after the header
(if any) is printed. |
String |
getProperty(String key) |
String |
getProperty(String key,
String defaultValue) |
void |
load(InputStream in)
Loads the properties in
in , according to the rules
described in Properties.load(java.io.Reader) . |
Object |
put(Object key,
Object val) |
void |
putAll(Map m)
Circumvents the superclass
putAll(java.util.Map) implementation,
putting all the key-value pairs via put(java.lang.Object, java.lang.Object) . |
Object |
remove(Object key)
Removes the key from the bookkeeping collectiotns as well.
|
void |
save(OutputStream out,
String header) |
void |
setAddWhitespaceAfterDelimiter(boolean add)
If set to
true , this properties object will add a
space after the delimiter character(if the delimiter is not
the space character). |
void |
setAllowDuplicates(boolean allowDuplicates)
If set to
true , duplicate properties are allowed, and
the last property setting in the input will overwrite any previous
settings. |
void |
setDefaultEntryDelimiter(char defaultEntryDelimiter)
The character to use as a delimiter between property keys and values.
|
void |
setInsertTimestamp(boolean insertTimestamp)
If set to
true , this properties object will add a
timestamp to the beginning of the file, just after the header
(if any) is printed. |
Object |
setProperty(String key,
String value) |
void |
store(OutputStream out,
String header) |
list, list, load, loadFromXML, propertyNames, store, storeToXML, storeToXML, stringPropertyNames
compute, computeIfAbsent, computeIfPresent, contains, containsKey, containsValue, elements, entrySet, equals, forEach, get, getOrDefault, hashCode, isEmpty, keys, keySet, merge, putIfAbsent, rehash, remove, replace, replace, replaceAll, size, toString, values
public FormatPreservingProperties()
public FormatPreservingProperties(Properties defaults)
public void setDefaultEntryDelimiter(char defaultEntryDelimiter)
defaultEntryDelimiter
- either ':' or '='public char getDefaultEntryDelimiter()
public void setAddWhitespaceAfterDelimiter(boolean add)
true
, this properties object will add a
space after the delimiter character(if the delimiter is not
the space character). Else, this will not add a space.
Default value: true
. Note that Properties.store(java.io.Writer, java.lang.String)
never writes whitespace.public boolean getAddWhitespaceAfterDelimiter()
true
, this properties object will add a
space after the delimiter character(if the delimiter is not
the space character). Else, this will not add a space.
Default value: true
. Note that Properties.store(java.io.Writer, java.lang.String)
never writes whitespace.public void setInsertTimestamp(boolean insertTimestamp)
true
, this properties object will add a
timestamp to the beginning of the file, just after the header
(if any) is printed. Else, this will not add a timestamp.
Default value: false
. Note that Properties.store(java.io.Writer, java.lang.String)
always writes a timestamp.public boolean getInsertTimestamp()
true
, this properties object will add a
timestamp to the beginning of the file, just after the header
(if any) is printed. Else, this will not add a timestamp.
Default value: false
. Note that Properties.store(java.io.Writer, java.lang.String)
always writes a timestamp.public void setAllowDuplicates(boolean allowDuplicates)
true
, duplicate properties are allowed, and
the last property setting in the input will overwrite any previous
settings. If set to false
, duplicate property definitions
in the input will cause an exception to be thrown during load(java.io.InputStream)
.
Default value: false
. Note that Properties.store(java.io.Writer, java.lang.String)
always allows duplicates.public boolean getAllowDuplicates()
true
, duplicate properties are allowed, and
the last property setting in the input will overwrite any previous
settings. If set to false
, duplicate property definitions
in the input will cause an exception to be thrown during load(java.io.InputStream)
.
Default value: false
. Note that Properties.store(java.io.Writer, java.lang.String)
always allows duplicates.public String getProperty(String key)
getProperty
in class Properties
public String getProperty(String key, String defaultValue)
getProperty
in class Properties
public Object setProperty(String key, String value)
setProperty
in class Properties
public void putAll(Map m)
putAll(java.util.Map)
implementation,
putting all the key-value pairs via put(java.lang.Object, java.lang.Object)
.public void clear()
public void load(InputStream in) throws IOException
in
, according to the rules
described in Properties.load(java.io.Reader)
. If getAllowDuplicates()
returns true
, this will throw a FormatPreservingProperties.DuplicateKeyException
if duplicate property declarations are
encountered.load
in class Properties
IOException
Properties.load(java.io.Reader)
public void save(OutputStream out, String header)
save
in class Properties
public void store(OutputStream out, String header) throws IOException
store
in class Properties
IOException
Copyright © 2006–2022 Apache Software Foundation. All rights reserved.