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/
It’s very usefull.
But please tell me. Why you do not close inputStream?
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?
Can you tell me how to mock this code in the junit
Hi,
What if i use FileHelper.class.getResourceAsStream(“config.properties”) without using getClassLoader() method. Are there any differencies?
Thanks.
Thanks.. It was useful..
Useful. Tnx.
This is really cool. It’s just save my time . Specially calling frrom static method.
Exactly what i am looking for.
how to write junit test for this method getFilePathToSaveStatic to cover exception part?
thanks! works perfectly with static methods
My getResourceAsStream is returning me null value… can you tell why it would be so?
mine too
Use it without getClassLoader()
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 .
Nice explanation.