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

前端 未结 5 761
别那么骄傲
别那么骄傲 2020-11-21 23:09

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 Inp

相关标签:
5条回答
  • 2020-11-21 23:50

    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.

    0 讨论(0)
  • 2020-11-21 23:57

    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.

    0 讨论(0)
  • 2020-11-22 00:01

    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?

    0 讨论(0)
  • 2020-11-22 00:10

    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.

    0 讨论(0)
  • 2020-11-22 00:10

    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.

    0 讨论(0)
提交回复
热议问题