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).

# comment  
! comment again  
Surname=Backham  
Othername=Peter  

Second, you need to use the Java API properties to read in the config text.

try {  
    properties = new Properties();  
    properties.load(new FileInputStream("config.ini"));  
} catch (Exception e) {  
    System.out.println(e);  
}  

Alternatively, I had created a class for it. You may copy it if you like, just don’t modify it. =]

/*  
 * 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);  
        }  
    }  
}