ClassLoader getResourceAsStream returns null

69,493

Solution 1

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

Solution 2

If you are working with Maven, add the following lines under BUILD tag. You get this error when you are running the webapp on server but there is no reference to the resources on the server.

So, add this the following into your POM.xml and see the magic.

<resources>
    <resource>
        <directory>src/main/resources</directory>
        <filtering>true</filtering>
        <includes>
            <include>fileName.txt</include>
        </includes>
    </resource>
    <resource>
        <directory>src/main/resources</directory>
        <filtering>true</filtering>
        <includes>
            <include>fileName.wsdl</include>
        </includes>
    </resource>
</resources>

Have Fun.!!!

Share:
69,493
IAmYourFaja
Author by

IAmYourFaja

my father is a principal at burgoyne intnl and got me this job programming lisp and development. I aspire to unittesting with a concentration in mobile platforms.

Updated on March 20, 2022

Comments

  • IAmYourFaja
    IAmYourFaja about 2 years

    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?