Class LayoutPreservingProperties

java.lang.Object
java.util.Dictionary<Object,Object>
java.util.Hashtable<Object,Object>
java.util.Properties
org.apache.tools.ant.util.LayoutPreservingProperties
All Implemented Interfaces:
Serializable, Cloneable, Map<Object,Object>

public class LayoutPreservingProperties extends Properties

A Properties collection which preserves comments and whitespace present in the input stream from which it was loaded.

The class defers the usual work of the java.util.Properties class to there, but it also keeps track of the contents of the input stream from which it was loaded (if applicable), so that it can write out the properties in as close a form as possible to the input.

If no changes occur to property values, the output should be the same as the input, except for the leading date stamp, as normal for a properties file. Properties added are appended to the file. Properties whose values are changed are changed in place. Properties that are removed are excised. If the removeComments flag is set, then the comments immediately preceding the property are also removed.

If a second set of properties is loaded into an existing set, the lines of the second set are added to the end. Note however, that if a property already stored is present in a stream subsequently loaded, then that property is removed before the new value is set. For example, consider the file

 # the first line
 alpha=one

 # the second line
 beta=two

This file is loaded, and then the following is also loaded into the same LayoutPreservingProperties object

 # association
 beta=band

 # and finally
 gamma=rays

The resulting collection sequence of logical lines depends on whether or not removeComments was set at the time the second stream is loaded. If it is set, then the resulting list of lines is

 # the first line
 alpha=one

 # association
 beta=band

 # and finally
 gamma=rays

If the flag is not set, then the comment "the second line" is retained, although the key-value pair beta=two is removed.

See Also: