Accessing a file inside a .jar file

31,934

Solution 1

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

Solution 2

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);
Share:
31,934
Chrizmo
Author by

Chrizmo

Updated on July 30, 2020

Comments

  • Chrizmo
    Chrizmo almost 4 years

    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?

  • Chrizmo
    Chrizmo over 12 years
    But if I use getResourceAsStream I can't use the File class right?
  • Sean Owen
    Sean Owen over 12 years
    That's right. It's not a file.
  • Ava
    Ava over 8 years
    I have a directory within resources which has all the files. How do I navigate through the directory to access all the files and then use above?
  • Samrez Ikram
    Samrez Ikram about 7 years
    Simple and working solution: Make a jar which will include your assets or files and then assess it.