应用程序如何使用 JAR 内的文件进行读写?
我需要将数据存储到 .jar 文件内的文件中并再次读取它。
我知道我可以使用 Class.getResourceAsStream()
方法,但它返回一个我可以读取的 InputStream
。但我寻找一种写作的方式。
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.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
不,你不需要。
相反,将“默认”文件存储在 Jar 中。如果更改,请将更改后的文件存储在其他位置。一个常见的位置是
user.home
的子目录。检查文件时,首先检查文件系统上是否存在更改的文件,如果不存在,则加载默认文件。请注意,通常最好描述目标而不是策略。 “将更改的文件存储在 Jar 中”是一种策略,而“在运行之间保存首选项”可能是目标。
相关: 什么是 XY 问题?
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?
这并没有得到真正的支持。原则上,您可以对 jar 文件进行操作,但不能保证新内容能够正确加载。让您的构建工具管理 jar 文件——并选择其他东西作为由您的程序本身管理的持久存储。就像一个文件。
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.
您不太可能安全地更改已加载的罐子。在使用时更改它并不是一个好主意。
如果您想执行此操作,请使用普通文件系统目录并从中添加/删除文件。即使这样也可能无法按您的预期工作。
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.
您可以使用包
java.util.jar
(或者实际上只是java.util.zip
)来操作任何jar 文件。由于 jar 内的文件将被压缩,因此这不是存储数据最时间的方式。您可能应该在其他地方使用目录(例如
System.getProperty("user.home") + "/.myProgram"
)或参见java.util.prefs
。You can manipulate any jar file using the package
java.util.jar
(or indeed justjava.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 seejava.util.prefs
.Class.getResource()
返回一个 URL。理论上,您可以使用此 URL 创建InputStream
和OutputStream
。但大多数情况下,生成的 JAR 是只读文件(或存档)。因此,您的应用程序在尝试使用它时可能会出错。Class.getResource()
returns a URL. Theoretically, you can use this URL to create yourInputStream
andOutputStream
. But in most cases, the generated JAR is a read-only file (or archive). So your application might trip when trying to use it.