15
votes

Possible Duplicate:
How do I read a resource file from a Java jar file?

Starting to go completely bonkers over this after googling for hours. I've also seen variations of the question on the site but can't seem to get it working. A JFrame needs to read data from a ini file and I've created a method to open said file. Said file is stored in a folder called resources inside a jar file.

private BufferedReader openIniFile(String filename){
    BufferedReader brReader = null;                 
    try{
        File fileObj = new File(this.getClass().getResource("/resources/" + filename).toURI()); // The fileobject of the file to read
        if(fileObj.exists())                                            
            brReader = new BufferedReader(new FileReader(fileObj));                     

    } catch(Exception e){
        System.err.println("Exception while opening file: " + e.getMessage()); 

    }

    return null;
}

This of course works perfectly when I'm running the code after compilation, but throws an exception after being exported to a .jar file. I've looked into using InputStream, FileInputStream but can't seem to find a solution that would work.

How can I make the jar file recognize the resource?

2
I tried that, couldn't get it working :(Chrizmo
"couldn't get it working" doesn't help muchDavid Heffernan
Sorry about that. It still throws a null exception.Chrizmo
""couldn't get it working" doesn't help much" doesn't help muchMichael

2 Answers

22
votes

When your resourse is in JAR file, it's not a File anymore. A File is only a physical file on the filesystem. Solution: use getResourceAsStream. Something like this:

new BufferedReader(new InputStreamReader(getClass().getResourceAsStream("/resources/" + filename)))
5
votes

You're reading the file wrong. If the file is located in a JAR, you cannot use the File class. Instead, you must get an InputStream to the file using getResourceAsStream():

InputStream in = this.getClass().getResourceAsStream("/resources/" + filename);