Accessing a file inside a .jar file
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);
Chrizmo
Updated on July 30, 2020Comments
-
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 over 12 yearsBut if I use getResourceAsStream I can't use the File class right?
-
Sean Owen over 12 yearsThat's right. It's not a file.
-
Ava over 8 yearsI 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 about 7 yearsSimple and working solution: Make a jar which will include your assets or files and then assess it.