Using getResourceAsStream() in STATIC method- Reading property Files

In our previous tutorial I have discussed how to read the property files using FileInputStream and create and write files using FileOutputStream in Java but that works when we have stored our file in our project root folder.

But there are cases when we have to store the files in our classpath folder. So in such cases we are not required to provide the path we just use getClass().getClassLoader().getResourceAsStream("Resource-Name") but only when we are not accessing it from static method.

File -> config.properties
#Sun Aug 24 13:34:24 IST 2014
password=Codingeek
database=localhost
username=Codingeek

So generally we do like this when we read from a Non Static Method but be sure that your file is in the src folder of your project.

public class ReadPropertyFile {
	public static void main(String[] args) {

		//Call to non static method
		new ReadPropertyFile().readFileNonStatic();
	}

	private  void readFileNonStatic() {
		Properties prop = new Properties();

                //try with resource.. Works only from Java 7
		try (InputStream input = getClass().getClassLoader().getResourceAsStream("config.properties")) {

			// load a properties file
			prop.load(input);

			// get the property value and print it out
			System.out.println("Database - " + prop.getProperty("database"));
			System.out.println("Username - " + prop.getProperty("username"));
			System.out.println("Password - " + prop.getProperty("password"));

		} catch (IOException ex) {
			ex.printStackTrace();
		}
	}
}

Output:-
Database – localhost
Username – Codingeek
Password – Codingeek

In Static Method this way of getting resource does not work as it says

Cannot make a static reference to the non-static method getClass() from the type Object

So here is the way of using it in a static method. Instead of using getClass() -> User ClassName.class.

public class ReadPropertyFile {
	public static void main(String[] args) {
		Properties prop = new Properties();

		//try with resource.. Works only from Java 7
		try(InputStream input = ReadPropertyFile.class.getClassLoader().getResourceAsStream("config.properties")) {

			// load a properties file
			prop.load(input);

			// get the property value and print it out
			System.out.println("Database - " + prop.getProperty("database"));
			System.out.println("Username - " + prop.getProperty("username"));
			System.out.println("Password - " + prop.getProperty("password"));

		} catch (IOException ex) {
			ex.printStackTrace();
		}
	}
}

Output:-
Database – localhost
Username – Codingeek
Password – Codingeek