How do I add a resources folder to my Java project in Eclipse

redeagle47 picture redeagle47 · Jan 14, 2015 · Viewed 151.4k times · Source

I want to have a place to store my image files to use in my Java project (a really simple class that just loads an image onto a panel). I have looked everywhere and cannot find how to do this. How do I do this?

I have tried adding a new folder to the project, adding a new class folder to the project, and adding a new source folder to the project. No matter what I do, I always get a IOException. The folders always say they are on the build path, so I'm not sure what to do.

import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class PracticeFrame extends JFrame{

private static BufferedImage image;
Thread thread;

public PracticeFrame() {
    super();
    setPreferredSize(new Dimension(640,480));
    setResizable(false);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    pack();
    setVisible(true);
}

public static void main (String[] args) {
    PracticeFrame pframe = new PracticeFrame();
    try {
        image = ImageIO.read(new File("/islands.png"));
    } catch (IOException e) {
        e.printStackTrace();
    }

    JPanel panel = new JPanel() {
        @Override
        protected void  paintComponent(Graphics g) {
            super.paintComponent(g);
            g.drawImage(image,0,0,null);
        }
    };

    panel.setBackground(Color.BLUE);
    panel.repaint();
    pframe.add(panel);


}


}

EDIT: Something that worked for me, and I have no idea why, was adding the main/res/ folder as a class folder and then removing it. I ran it while the /main/res/ was part of the build path as a class folder and it still didn't work. When i added it, i got a popup that told me something about excluded filters. But when i removed the folder from the libraries in the build path, and changed my file path to:

image = ImageIO.read(new File("src/main/res/islands.png"));

I at least stopped getting the IOException thrown. I must not be adding the image to the panel correctly, because it's not showing up, but at least it found the file (I think).

Answer

Lautaro Cozzani picture Lautaro Cozzani · Jan 14, 2015

When at the "Add resource folder", Build Path -> Configure Build Path -> Source (Tab) -> Add Folder -> Create new Folder enter image description here

add "my-resource.txt" file inside the new folder. Then in your code:

    InputStream res =
    Main.class.getResourceAsStream("/my-resource.txt");

    BufferedReader reader =
        new BufferedReader(new InputStreamReader(res));
    String line = null;
    while ((line = reader.readLine()) != null) {
        System.out.println(line);
    }
    reader.close();