找出在Java中存储本地文件的位置

时间:2014-08-12 23:23:23

标签: java java-web-start jnlp

由于我认为超出此问题范围的原因,我想移动我编写的用于Java Web Start的程序,以停止使用JWS并将其作为普通的Jar文件分发。

这个计划的主要问题是如何确定在Java中以一种不错的方式存储文件的位置,假设我将在不同的平台上运行(尽管我也依赖于JOGL,所以&#39至少在可怕的深奥平台上运行没有很大的风险。我的程序存储各种本地数据,主要用于缓存或类似缓存的#34;目的 - 能够保留它非常好,但如果数据丢失则不是完全灾难。

我目前使用JNLP PersistenceService来实现这个目的,因此离开JWS我需要找出一些存储文件的目录。考虑一下:

File datadir = new File(System.getProperty("user.home"), ".myprogram");

我认为这在Unix和类Unix平台上运行良好,但它至少在Windows等某些平台上显然是 ugly ,我想我应该使用{{1目录或其他任何内容。

我目前的想法是使用此AppData作为默认的回落,除了在已知的平台上我用更好的东西替换它,比如Windows。我对此的问题是:

  • 这是一个合理的默认开头吗?我在某些未知的平台上失败了,我有点好;如果是这种情况,我会默默地禁用缓存和一些扩展功能,但它是否会以某种方式失败,从而导致不良结果?
  • 有没有什么好办法可以弄明白我在Windows上?我现在能想到的最好的事情是将一些模式与datadir相匹配,我猜 应该工作得很好,但有更好的方法吗?我不会用反思进行本质上的测试,看看是否存在一些可以提供帮助的os.name包或某些东西(有回落到默认值的风险),如果这是好的话。 (问题一般适用于所有平台;是否有任何一些有用的习惯用法来解决这个问题?)
  • 有没有一个好方法可以找出在Windows上使用的目录?使用静态路径看起来很难看,因为我知道它们可以被注册表设置覆盖,或者被本地化等等。
  • 我从一开始就应该考虑其他任何平台吗?我的sun.*应该在OSX上正常工作,对吗?
  • 还有更好的选择吗?

2 个答案:

答案 0 :(得分:1)

如果它只是可替换的缓存数据,我建议使用临时目录。

请参阅:

new File(File.createTempFile().getParent(), 'my-file-name');

您可以将其设置为在应用关闭时销毁,或者将其保留在那里。

如果你想要更多的半永久存储但不需要存储,你可能需要关心你所使用的操作系统,并采取相应的措施,如t his question的答案

答案 1 :(得分:1)

考虑使用java.util.prefs.Preferences API来实现此目的。