应用程序如何使用 JAR 中的文件进行读写?
Posted
技术标签:
【中文标题】应用程序如何使用 JAR 中的文件进行读写?【英文标题】:How can an app use files inside the JAR for read and write? 【发布时间】:2019-01-18 21:42:23 【问题描述】:我需要将数据存储到 .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 创建您的 InputStream
和 OutputStream
。但在大多数情况下,生成的 JAR 是只读文件(或存档)。因此,您的应用程序在尝试使用时可能会出错。
【讨论】:
以上是关于应用程序如何使用 JAR 中的文件进行读写?的主要内容,如果未能解决你的问题,请参考以下文章