一个应用程序如何使用JAR文件内的文件进行读写?

39

我需要将数据存储到.jar文件内的文件中,然后再读取它。

我知道可以使用 Class.getResourceAsStream() 方法,但它返回一个 InputStream 对象,我只能从中读取数据。但我正在寻找一种写入数据的方法。

5个回答

101
我需要将数据存储到.jar文件内部的文件中,并再次读取它。
不,你不需要这样做。
相反,将“默认”文件存储在Jar内。 如果更改了它,请将更改后的文件存储在另一个位置。 一个常见的位置是user.home的子目录。 在检查文件时,首先检查文件系统上是否存在更改后的文件,如果不存在,则加载默认文件。
注意,通常更好的做法是描述目标,而不是策略。"将更改的文件存储在Jar中"是一种策略,而"在运行之间保存首选项"可能是目标。 相关:什么是XY问题?

3

这并不是被完全支持的。原则上,你可以对jar文件进行操作,但是不能保证新的内容能够正确加载。让你的构建工具管理jar文件,并选择其他由程序本身管理的持久化存储方式,比如文件。


2

很难安全地更改已加载的jar文件。在使用时更改它并不是一个好主意。

如果您想这样做,请使用普通的文件系统目录,并添加/删除其中的文件。即使这样做,也可能无法按照您的预期工作。


2

您可以使用包java.util.jar(或者只是java.util.zip)来操作任何jar文件。由于jar内部的文件将被压缩,因此这不是您存储数据的最有效的方式。

您应该在其他地方使用目录(例如System.getProperty("user.home") + "/.myProgram"),或查看java.util.prefs


1

Class.getResource() 返回一个 URL。理论上,您可以使用此 URL 创建您的 InputStreamOutputStream。但在大多数情况下,生成的 JAR 是只读文件(或存档)。因此,在尝试使用它时,您的应用程序可能会出现问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接