java - 写入类资源是保存文件的好方法吗?

标签 java file io resources

当我们想要加载静态文件时,例如图片、声音文件、包含游戏 map 信息的文件……我们可以将它们作为资源存储在 jar 文件中并使用 getClass.getResource("images/splash.png") (还有 getResourceAsStream) 来加载和使用它们。但是,当我们想要读取写入设置文件之类的文件时,我认为使用资源不是一个好方法,因为我认为资源旨在存储不应该的只读文件更改,例如启动屏幕图像或游戏的背景音乐;以下是我这样思考的原因:

  1. 这就是为什么 getResourceAsStream 的返回值是 InputStream 的一个实例,而我们没有类似的函数来为我们提供 OutputStream ,因为我们不应该更改资源文件。
  2. 写入资源会更改程序 .jar 文件,我想这根本不是一件好事;因为如果我们这样做:我们无法使用校验和来验证文件,如果我们是受限用户并且系统管理员没有授予我们写入权限,我们就无法对主 .jar 进行更改> 文件,特定于用户的首选项很难或不可能实现,...

所以,我的问题是:

  1. 我的想法和假设的哪些部分是正确的或错误的?
  2. 如果他们是对的,存储此类文件的最佳方式是什么(我的意思是在操作系统和计算机之间简短且可移植)? (应用程序设置/首选项、游戏保存文件……)

(@一些可能想将其标记为重复的用户:我不认为我的问题是重复的,我在网站中进行了搜索,我承认它有一些共同的部分和一些问题,但它不是重复的!)

最佳答案

无论提供什么 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/

相关文章:

java - 读取文件时如何确定进度

c++ - 根据另一个数组的内容将三个数组输出到一个文件

perl - Perl 中的输出流 : STDERR, STDOUT,

java - zip 文件中的文件名太长 java

Java 追加到文本文件的每行末尾

java - Struts2 - 在 struts.xml 中有两个包指向动态 web 根目录

java - 从android上传文件到服务器失败

c++ - 替换文件中的行 C++

c - 为什么 printf 在无限循环之前不起作用?

java - 在集合上适当使用 Java 泛型