Java : getResourceAsStream in static method

To call getResourceAsStream in a static method, we use ClassName.class instead of getClass()

1. In non static method


	getClass().getClassLoader().getResourceAsStream("config.properties"))

2. In static method


	ClassName.class.class.getClassLoader().getResourceAsStream("config.properties")) 

1. Non Static Method

A .properties file in project classpath.

src/main/resources/config.properties

#config file
json.filepath = /Users/mkyong/Documents/workspace/SnakeCrawler/data/
FileHelper.java

package com.mkyong;

import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;

public class FileHelper {

    public static void main(String[] args) {

        FileHelper obj = new FileHelper();
        System.out.println(obj.getFilePathToSave());

    }

    public String getFilePathToSave() {

        Properties prop = new Properties();

        String result = "";

        try (InputStream inputStream = getClass()
				.getClassLoader().getResourceAsStream("config.properties")) {
			
            prop.load(inputStream);
            result = prop.getProperty("json.filepath");

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

        return result;

    }

}

Output


/Users/mkyong/Documents/workspace/SnakeCrawler/data/

2. Static Method

If the method getFilePathToSave() is converted into a static method, the getClass() method will be failed, and prompts Cannot make a static reference to the non-static method getClass() from the type Object

To fix this, update getClass() to ClassName.class

FileHelper.java

package com.mkyong;

import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;

public class FileHelper {

    public static void main(String[] args) {

        System.out.println(getFilePathToSaveStatic());
    }    

    public static String getFilePathToSaveStatic() {

        Properties prop = new Properties();

        String result = "";

        try (InputStream inputStream = FileHelper.class
				.getClassLoader().getResourceAsStream("config.properties")) {
				
            prop.load(inputStream);
            result = prop.getProperty("json.filepath");

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

        return result;

    }

}

Output


/Users/mkyong/Documents/workspace/SnakeCrawler/data/

References

mkyong

Founder of Mkyong.com, passionate Java and open-source technologies. If you enjoy my tutorials, consider making a donation to these charities.

14 Comments
Most Voted
Newest Oldest
Inline Feedbacks
View all comments
asu
12 years ago

It’s very usefull.
But please tell me. Why you do not close inputStream?

Jinhui
6 years ago

There’re two “class”s inside “ClassName.class.class.getClassLoader().getResourceAsStream(“config.properties”))” at the beginning of the post. Guess there should only be one, right?

Cuneyt
12 years ago

Hi,

What if i use FileHelper.class.getResourceAsStream(“config.properties”) without using getClassLoader() method. Are there any differencies?

Thanks.

Siva Munnaluri
9 years ago

Can you tell me how to mock this code in the junit

Krishna
10 years ago

Thanks.. It was useful..

pony
12 years ago

Useful. Tnx.

Forhad
13 years ago

This is really cool. It’s just save my time . Specially calling frrom static method.
Exactly what i am looking for.

Sonal C Macwan
5 years ago

how to write junit test for this method getFilePathToSaveStatic to cover exception part?


Denís Navarro Alcaide
10 years ago

thanks! works perfectly with static methods

Harshad Loya
11 years ago

My getResourceAsStream is returning me null value… can you tell why it would be so?

ConSgo
9 years ago
Reply to  Harshad Loya

mine too

TomSkyer
9 years ago
Reply to  ConSgo

Use it without getClassLoader()

oussama
12 years ago

i am using getResourceAsStream to read an image but when i export my runnable jar i can not accessed to it . so i wonder if there is a solution , just a notification it’s work on eclipse .

Hassan Ali
13 years ago

Nice explanation.