在Linux上存储应用程序数据(非特定于用户)的位置

时间:2009-10-02 15:04:04

标签: java linux

在我的基于OSGi的Java应用程序中,我正在开发一个包,为系统的其余部分提供对文件系统的访问。除了提供对用户主目录的访问之外,我还希望提供对非用户特定区域的访问。确切地说这个区域将用于什么尚未确定,但它不适用于首选项(由不同的包处理),但它可能用于存储可能在运行时更改的数据。

我打算为此目的使用以下目录:

  • Windows Vista& Windows 7:“\ ProgramData”。
  • Windows XP:“\ Documents and Settings \ All Users”。
  • Mac OS X:“/ Library / Application Support”。

Linux中哪一个是合理的等价物?如何从我的Java代码中获取它?

8 个答案:

答案 0 :(得分:58)

这取决于您计划存储的数据类型。这个答案的前提是您在运行时存储和修改数据。

与其他人的建议相反,我建议不要使用/usr/share进行存储。来自Filesystem Hierarchy Standard

  

/ usr / share层次结构适用于所有人   只读架构独立   数据文件。

在修改数据时,这违反了/usr子系统的只读性质。

一个看似更好的存储应用程序状态数据的地方是/var,或者更具体地说是/var/lib。这也来自Hierarchy Standard。您可以创建/var/lib/myapp,或者如果您还使用锁定文件或日志等内容,则可以使用/var/lock/var/log

更深入地了解整个标准(与上述相关) - 您可能会找到一个适合您想做的更好的地方。

Steve K一样,我也建议使用Preferences API来获取应用程序首选项数据。

答案 1 :(得分:36)

取决于。

  • 全局配置 - >的/ etc /应用程序的名字

  • 只读,独立于机器架构 - >的/ usr /共享/应用程序的名字

  • 只读,机器特定 - > / usr / lib中/应用程序的名字

  • 读写 - >的/ var / lib中/应用程序的名字

不保证完整性,请查看Filesystem Hierarchy Standard

答案 2 :(得分:7)

由于您使用的是Java,您是否看过Preferences API

从介绍:

  

应用程序需要首选项和配置数据以适应不同用户和环境的需求。 java.util.prefs包为应用程序提供了一种存储和检索用户和系统首选项和配置数据的方法。数据持久存储在依赖于实现的后备存储中。有两个独立的优先级节点树,一个用于用户首选项,另一个用于系统首选项

我会让内置的API完成工作。

答案 3 :(得分:5)

freedesktop.org(以前称为X桌面组)项目已在XDG Base Directory Specification中为此定义了一些标准。

在你的情况下,我会看一下$XDG_DATA_DIRS

  

$XDG_DATA_DIRS定义除了$XDG_DATA_HOME基目录之外的搜索数据文件的首选顺序基本目录集。 $XDG_DATA_DIRS中的目录应该用冒号':'分隔。

     

如果$XDG_DATA_DIRS未设置或为空,则应使用等于/usr/local/share/:/usr/share/的值。

我热烈建议您阅读XDG Base Directory Specification

答案 4 :(得分:3)

在/ usr / share或/ usr / local / share文件夹

答案 5 :(得分:1)

如果它不是特定于用户的,您可以将其存储在/ usr / share / appname

答案 6 :(得分:1)

我知道这是一个老问题,但根据https://en.wikipedia.org/wiki/Filesystem_Hierarchy_Standard (截至2015年7月似乎更新和更正)...

  

假设数据文件被理解为不符合/tmp/var/tmp然后/usr/local/share/theApp/usr/local/theApp的要求。

答案 7 :(得分:-1)

你想这样硬编码吗?您可以使用System.getProperty(“user.home”)将用户置于家中,以便更加独立于平台。