How can an app use files inside the JAR for read and write?

20,100

Solution 1

I need to store data into files inside .jar file and read it again

No you don't.

Instead store the 'default' file inside the Jar. If it is changed, store the altered file in another place. One common place is a sub-directory of user.home. When checking for the file, first check the existence of an altered file on the file system, and if it does not exist, load the default file.


Note that it is generally better to describe the goal, rather than the strategy. 'Store changed file in Jar' is a strategy, whereas 'Save preferences between runs' might be the goal.

Related: What is the XY problem?

Solution 2

This is not really supported. In principle, you could operate on the jar file, but there's no guarantee the new contents would be correctly loaded. Let your build tools manage the jar file -- and choose something else for persistent storage managed by your program itself. Like a file.

Solution 3

It is unlikely that you can change a loaded jar safely. Changing it while it is being used is not a good idea.

If you want to do this, use a plain file system directory and add/remove files from it. Even this may not work as you expect.

Solution 4

You can manipulate any jar file using the package java.util.jar (or indeed just java.util.zip). As files inside a jar will be compressed, this isn't the most time efficient way for you to store data.

You should probably use a directory somewhere else (e.g. System.getProperty("user.home") + "/.myProgram") or see java.util.prefs.

Solution 5

Class.getResource() returns a URL. Theoretically, you can use this URL to create your InputStream and OutputStream. But in most cases, the generated JAR is a read-only file (or archive). So your application might trip when trying to use it.

Share:
20,100
Moataz Aahmed Mohammed
Author by

Moataz Aahmed Mohammed

Received a B.Sc. in computer science from Helwan university. Over the past 5 years, I worked in R&D, Software development and Human computer interaction research. I have an experience in - Enterprise application design. - Requirement analysis. - Software development and documentation. - Team leading and follow up with team members.

Updated on January 09, 2020

Comments

  • Moataz Aahmed Mohammed
    Moataz Aahmed Mohammed over 4 years

    I need to store data into files inside .jar file and read it again.

    I know that I can use Class.getResourceAsStream() method but it returns an InputStream that I can read from. But I look for a way to write.