I'm using Java 1.6. Let's say I have a properties file ...
a=1
b=2
c=3
...
How can i [sic] read the properties file in Java such that when I retrieve
the key set, the iterator structure would return the keys in the order
they are found in the file (in the above example, "a", "b", "c")?
<sscce source="com/lewscanon/eegee/Properteer.java">
/* Properteer.java
* $Id$
*/
package com.lewscanon.eegee;
import java.io.Closeable;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.Reader;
import java.util.Map;
import java.util.Properties;
/**
* Properteer.
*/
public class Properteer
{
private static final String PROPFILE = "properteer.properties";
/**
* main.
* @param args String [] command arguments.
*/
public static void main( String [] args )
{
Reader propReader = new InputStreamReader(
Properteer.class.getResourceAsStream( PROPFILE ));
assert propReader != null;
Properties props = new Properties();
try
{
props.load( propReader );
}
catch ( IOException exc )
{
final String msg = "Unable to load properties: "
+ exc.getLocalizedMessage();
System.err.println( msg );
IllegalStateException rethrow = new IllegalStateException( msg,
exc );
throw rethrow;
}
finally
{
close( propReader );
}
System.out.println( "size "+ props.size() +": " );
System.out.println( "------" );
System.out.println( "native order" );
for ( Map.Entry <?, ?> entry : props.entrySet() )
{
System.out.println( entry.getValue().toString() );
}
System.out.println( "------" );
System.out.println( "forced order" );
for ( Orderer ord : Orderer.values() )
{
System.out.println( props.get( ord.toString() ));
}
System.out.println( "------" );
System.out.println();
}
static void close( Closeable closeable )
{
assert closeable != null; // package-private - cannot accept null
try
{
closeable.close();
}
catch ( IOException exc )
{
final String msg = "Unable: "+ exc.getLocalizedMessage();
System.err.println( msg );
}
}
enum Orderer
{
FOO("foo"), BAR("bar"), BAZ("baz"), QUX("qux"), ;
private final String handle;
Orderer( String han )
{
this.handle = han;
}
@Override
public final String toString()
{
return this.handle;
}
/**
* fromString - convert from {@code String} to {@code Orderer}.
* Tries custom strings first, then defaults to {@code valueOf()}.
* @param han String to convert.
* @return Orderer matching the input, or {@code null} if no match.
*/
public static Orderer fromString( String han )
{
if ( han == null )
{
return null;
}
for ( Orderer inst : values() )
{
if ( han.equals( inst.toString() ) )
{
return inst;
}
}
return valueOf( han );
}
}
}
</sscce>
properteer.properties (in same subdirectory as Properteer.class):
----------------------
foo = The Fonz
bar = Richie Cunningham
baz = Joanie Cunningham
qux = Chachie
----------------------
output:
----------------------
size 4:
------
native order
Chachie
Richie Cunningham
Joanie Cunningham
The Fonz
------
forced order
The Fonz
Richie Cunningham
Joanie Cunningham
Chachie