当我们想要加载静态文件时,例如图片、声音文件、包含游戏 map 信息的文件……我们可以将它们作为资源存储在 jar 文件中并使用 getClass.getResource("images/splash.png")
(还有 getResourceAsStream
) 来加载和使用它们。但是,当我们想要读取和写入设置文件之类的文件时,我认为使用资源不是一个好方法,因为我认为资源旨在存储不应该的只读文件更改,例如启动屏幕图像或游戏的背景音乐;以下是我这样思考的原因:
- 这就是为什么
getResourceAsStream
的返回值是InputStream
的一个实例,而我们没有类似的函数来为我们提供OutputStream
,因为我们不应该更改资源文件。 - 写入资源会更改程序
.jar
文件,我想这根本不是一件好事;因为如果我们这样做:我们无法使用校验和来验证文件,如果我们是受限用户并且系统管理员没有授予我们写入权限,我们就无法对主.jar
进行更改> 文件,特定于用户的首选项很难或不可能实现,...
所以,我的问题是:
- 我的想法和假设的哪些部分是正确的或错误的?
- 如果他们是对的,存储此类文件的最佳方式是什么(我的意思是在操作系统和计算机之间简短且可移植)? (应用程序设置/首选项、游戏保存文件……)
(@一些可能想将其标记为重复的用户:我不认为我的问题是重复的,我在网站中进行了搜索,我承认它有一些共同的部分和一些问题,但它不是重复的!)
最佳答案
无论提供什么 API,上面 #2 中的三个观察结果都是不在资源文件中存储设置的正当理由。
在 Java 中保存设置的方法有很多种,包括:
- Java system property “user.home”提供用户的主目录,用户应具有写入权限。您可以在其下创建特定于应用程序的子目录。
- Java 提供了 Preferences API 。这可能会将设置存储在目录中或(在 Windows 上)注册表中。
- OSGI 提供 preferences API 。
- 如果您使用 Eclipse RCP,则可以使用 ConfigurationScope 写入配置目录。请参阅 Eclipse 常见问题解答 "What is a preference scope" )。
关于java - 写入类资源是保存文件的好方法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17490415/