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

14 comments on “Java : getResourceAsStream in static method

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

    Reply
  2. 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?

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

    Reply
  4. thanks! works perfectly with static methods

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

    Reply
  6. Hi,

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

    Thanks.

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

    Reply
  8. 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 .

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

    Reply

Leave a Comment

Your email address will not be published. Required fields are marked *