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

Posted

技术标签:

【中文标题】应用程序如何使用 JAR 中的文件进行读写?【英文标题】:How can an app use files inside the JAR for read and write? 【发布时间】:2011-06-30 10:53:14 【问题描述】:

我需要将数据存储到 .jar 文件中的文件中并再次读取。

我知道我可以使用Class.getResourceAsStream() 方法,但它返回一个InputStream,我可以从中读取。但我正在寻找一种写作的方式。

【问题讨论】:

【参考方案1】:

我需要将数据存储到 .jar 文件中的文件中并再次读取它

不,你没有。

而是将“默认”文件存储在 Jar 中。如果已更改,请将更改后的文件存储在其他位置。一个常见的地方是user.home 的子目录。检查文件时,首先检查文件系统上是否存在修改过的文件,如果不存在则加载默认文件。


请注意,描述目标通常比描述策略更好。 “将更改的文件存储在 Jar 中” 是一种策略,而 “在运行之间保存首选项” 可能是目标。

相关: What is the XY problem?

【讨论】:

【参考方案2】:

这不是真的支持。原则上,您可以对 jar 文件进行操作,但不能保证新内容会正确加载。让您的构建工具管理 jar 文件 - 并为由您的程序本身管理的持久性存储选择其他东西。像一个文件。

【讨论】:

【参考方案3】:

您不可能安全地更改已加载的 jar。在使用时更改它不是一个好主意。

如果您想这样做,请使用普通文件系统目录并从中添加/删除文件。即使这样也可能无法如您所愿。

【讨论】:

【参考方案4】:

您可以使用包java.util.jar(或者实际上只是java.util.zip)来操作任何jar 文件。由于 jar 中的文件将被压缩,这不是您存储数据的最时间效率的方式。

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

【讨论】:

【参考方案5】:

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

【讨论】:

以上是关于应用程序如何使用 JAR 中的文件进行读写?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用Python3读写INI配置文件

Java读写dbf文件

如何使 .jar 文件在我的计算机上运行? [复制]

jar打包后怎么读取里面的文件

如何使netbeans项目嵌入数据库的jar文件?

如何添加第三方 Java JAR 文件以在 PySpark 中使用