在Java应用程序中使用XDG目录规范

在Java应用程序中使用XDG目录规范

问题描述:

我正在尝试遵循我的Java应用程序上的XDG目录规范。我已经用它为应用程序数据:在Java应用程序中使用XDG目录规范

protected String getDefaultDataDir() { 

    String rootPath = System.getenv("XDG_DATA_HOME"); 

    if(rootPath == null) { 
     rootPath = System.getProperty("user.home")+S+".local"+S+"share"; 
    } 

    return rootPath+S+Pinocchio.PLATFORMNAME; 
} 

(S是包含System.getProperty(“文件分割符”)常数)

我现在想对用户的文件存储文档夹。但是我没有名为XDG_DOCUMENTS_DIR的环境变量。我拥有具有该XDG配置的“.config/user-dirs.dirs”文件和直接返回该路径的“xdg-user-dir DOCUMENTS”文件。

更糟糕的是,默认文档目录取决于用户区域设置。

这是在java应用程序中使用配置的Documents目录的最佳方式?

+0

您提到“默认文档目录取决于用户区域设置”。这个信息存储在哪里?即当前用户的语言环境,也是每个语言环境的路径等(我只是想明确地知道问题所在) – TheCodeArtist

+0

恐怕您必须使用ProcessBuilder来运行xdg-user-dir或者自己解析'.config/user-dirs.dirs'。 –

+0

@DenisTulskiy你说得对。我的第一反应是建议从代码中运行'xdg-user-dir'。然而,我仍然想知道本地化,即**用户区域设置**“商业”是否适合。因此,等待更多细节...... – TheCodeArtist

在Gnome上有java-gnome支持库,它正在调用与gnome更好地集成的本机调用。它可以通过调用Glib.getUserSpecialDir获得用户目录的路径。如果你打算在你的程序中使用更多的桌面集成功能,可能还是值得一试的。

在为此寻找答案时,我找到了xdg-java。我还没有测试过它,但似乎完全符合你(和我)的要求。

它尚未实现所有规范,但它确实实现了我现在需要的规范,我猜测作者会接受补丁。