We're going to look at loading resources in Java in the Eclipse IDE, though the basic principles are the same in whatever IDE you're using. The general idea is to use the classloader to load your resources rather than using a File object or a FileInputStream. This makes your applications more flexible and relocatable and makes resource loading independent of the current directory.
The first thing to do is to create two packages: one as our code package root and one for resources:


First the first code package of the root:

New code package

And now the resources package:

New resource package

We import the image 'tj-logo.png' as a resource in the package 'resources'. This can be seen in the image below. We then add some source code (in this case by import from the filesystem):

Import source

Now we add an ImageIcon. We address the resource from the package root ('/') and use getResource so that it uses the classloader.

Load resource

Now we run the application, and we can see if finds the resource:

Run app