Search code examples
javaeclipseclasspathclassloaderinputstream

ClassLoader getResourceAsStream returns null


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?


Solution

  • 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).