【问题标题】:Using XDG directory specification on Java application在 Java 应用程序上使用 XDG 目录规范
【发布时间】:2014-04-10 14:26:50
【问题描述】:

我正在尝试在我的 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("file.separator"))

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

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

在 java 应用程序上使用配置的 Documents 目录的最佳方式是什么?

【问题讨论】:

  • 您提到“默认文档目录取决于用户区域设置”。这些信息存储在哪里?即当前用户区域设置以及每个区域设置的路径等(我只是想准确了解问题所在)
  • 恐怕你要么必须使用ProcessBuilder 来运行xdg-user-dir,要么自己解析.config/user-dirs.dirs
  • @DenisTulskiy 你是对的。我的第一反应也是建议从代码中运行xdg-user-dir。但是我仍然想知道本地化,即 user locale “business” 是如何适应的。因此等待更多细节......
  • @TheCodeArtist xdg-user-dir 和 xdg-user-dirs-update 管理它。在我的 Debian 机器上,这些默认目录列在 /etc/xdg/user-dirs.defaults 上。然后应用程序使用它们的 i18n 文件翻译每个路径元素,例如 /usr/share/locale/es/LC_MESSAGES/xdg-user-dirs.mo 用于西班牙语翻译。你问的是这个吗?
  • 然后简单地运行xdg-user-dir 并解析它的输出应该适合你。查看此answer 以了解如何从 java 运行可执行文件并捕获它返回的输出。

标签: java linux gnu freedesktop.org xdgutils


【解决方案1】:

在寻找答案时,我找到了xdg-java。我尚未对其进行测试,但似乎完全符合您(和我)的要求。

它还没有实现所有规范,但它确实实现了我现在需要的那些,我猜作者会接受补丁。

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-03-23
      • 2017-10-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多