Reading configuration file in Java

In order to make a program more flexible, it is normal to create an external file to store all the setting. For example, resolution setting of a game is saved in “config.ini” or “settings.prop” so that we can easily modify a program without recompile it. Here I would show you how to do it.

First, we create a config file (you can name it with any name you want as Java read its text only).
[sourcecode language=”java”]
# comment
! comment again
Surname=Backham
Othername=Peter
[/sourcecode]

Second, you need to use the Java API “properties” to read in the config text.
[sourcecode language=”java”]
try {
properties = new Properties();
properties.load(new FileInputStream("config.ini"));
}
catch (Exception e) {
System.out.println(e);
}
[/sourcecode]

Alternatively, I had created a class for it. You may copy it if you like, just don’t modify it. =]
[sourcecode language=”java”]
/*
* Code by Nicholas Wong. Copyright reserved.
* Usage:
* ConfigReader configReader = new ConfigReader("config.ini");
* SshConnectorOld.hostname = configReader.getProperty("Surname");
*/

import java.util.*;
import java.io.*;

public class ConfigReader {

private String fileName;
private Properties properties;

public String getProperty(String propName) {
return properties.getProperty(propName);
}

public void printPropertyList() {
properties.list(System.out);
}

public ConfigReader(String fileName) {
this.fileName = fileName;
readProperties();
}

private static String getClassPath() {
StringBuffer classLocation = new StringBuffer();
final String className = SshConnectorOld.class.getName().replace(‘.’, ‘/’) + ".class";
final ClassLoader classloader = SshConnectorOld.class.getClassLoader();

if (classloader == null) {
System.out.println("Cannot load the class");
return null;
}
else {
String[] classLocationArray = classloader.getResource(className).toString().substring(6).split("/");
for (int i = 0; i<classLocationArray.length-2; i++) {
classLocation.append(classLocationArray[i] + "/");
}
return classLocation.toString();
}
}

private void readProperties() {
try {
properties = new Properties();
properties.load(new FileInputStream(getClassPath() + fileName));
System.out.println("Configuration file is read successfully.");
}
catch (Exception e) {
System.out.println("Configuration file reading failed.");
System.out.println(e);
}
}
}
[/sourcecode]

Leave a Reply

%d bloggers like this: