在我的基于OSGi的Java应用程序中,我正在开发一个包,为系统的其余部分提供对文件系统的访问。除了提供对用户主目录的访问之外,我还希望提供对非用户特定区域的访问。确切地说这个区域将用于什么尚未确定,但它不适用于首选项(由不同的包处理),但它可能用于存储可能在运行时更改的数据。
我打算为此目的使用以下目录:
Linux中哪一个是合理的等价物?如何从我的Java代码中获取它?
答案 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”)将用户置于家中,以便更加独立于平台。