ClassLoader getResourceAsStream returns null

IAmYourFaja picture IAmYourFaja · Sep 26, 2013 · Viewed 64.6k times · Source

My project directory structure (in Eclipse):

MyProject/
    src/        --> "source directory" on Eclipse's classpath/buildpath
        com.me.myapp
            Driver
            myconfig.txt

In Driver, I have the following code:

public class Driver {
    public static void main(String[] args) {
        InputStream is = ClassLoader.getSystemClassLoader.getResourceAsStream("myconfig.txt");
        if(is == null)
            System.out.println("input stream is null");
        else
            System.out.println("input stream is NOT null :-)");
    }
}

When I run this I get the following console output:

input stream is null

Why? Have I placed myconfig.txt in an incorrect location? Am I using the ClassLoader API incorrectly? Something else? Thanks in advance!

Answer

Sotirios Delimanolis picture Sotirios Delimanolis · Sep 26, 2013

If it's in the same package use

InputStream is = Driver.class.getResourceAsStream("myconfig.txt");

The way you have it

InputStream is = ClassLoader.getSystemClassLoader().getResourceAsStream("myconfig.txt");

It's looking for the file in the root of the classpath. You could use

InputStream is = ClassLoader.getSystemClassLoader().getResourceAsStream("com/me/myapp/myconfig.txt");

The rules for searching are explained in the javadoc of ClassLoader#getResource(String) and the javadoc of Class#getResource(String).