跨平台方式询问用户的文档文件夹?

时间:2011-04-08 03:18:54

标签: java cross-platform

我正在用Java编写一个跨平台程序,并希望将配置文件粘贴在用户的文档文件夹中(Windows下的“我的文档”,适当的Linux下的“文档”,以及Mac OS下调用的文件夹) ,但我不确定如何向Java询问。

我想远离硬编码的事情(如果我们在Windows上,那么 X ,如果我们在Linux上,那么 Y Z 如果我们使用OS X),因为这会给我的支持负担而不是Oracle开发团队。

我检查了系统属性列表,但它似乎没有包含用户的文档文件夹。

6 个答案:

答案 0 :(得分:7)

可悲的是,没有简单的跨平台方式。您必须利用每个OS平台上的本机功能

  • 以下是有关如何在osx
  • 中执行此操作的一些信息
  • 以下是有关如何在windows
  • 中执行此操作的一些信息

对于Linux我没有方便的链接,但鉴于Linux中不一定有Documents文件夹的概念,我不知道一个好的解决方案。系统属性user.home至少应该在Linux中有效。

答案 1 :(得分:2)

部分解决方案:

boolean isMac = System.getProperty(“os.name”)。equals(“Mac OS X”);

或使用http://commons.apache.org/vfs/获取操作系统: http://commons.apache.org/vfs/apidocs/org/apache/commons/vfs2/util/Os.html

//无论Mac OSX的语言是什么,文件夹名称都是相同的。

Mac:System.getProperty(“user.home”)+ File.separator +“Documents”);

/用户/大卫/文件

Win:System.getenv(“APPDATA”));

C:\ Documents and Settings \ david \ Application Data

答案 2 :(得分:1)

以某种方式向用户询问他们想要保存数据的位置,或使用当前目录(简单相对路径)并提供适当的设置说明。 “询问”的一种方法是具有可以通过命令行设置的属性。

不要只是用你的应用程序的东西污染用户的主目录 - 你怎么知道他们如何组织他们的文档树?

我完全厌倦了面向* nix的程序,将他们的小配置文件和数据文件夹放入我的文档文件夹的根目录。

答案 3 :(得分:1)

这通常不可能通用。您将不得不使用平台相关的apstractions。我这样对AppData这样做,例如,在Windows上我检测到AppData / Roaming或AppData / Local,这取决于我需要存储的数据,在其他平台上我在userhome中创建了一个文件夹“.myappname”,并使用它。

对于documents文件夹,您必须阅读注册表。在Windows Vista之前使用user.home propery +“/ Documents”是不合适的,因为在其他语言中它可能是“/ Dokumente”(德语)或其他东西。只是注册表有这个文件夹的真实路径。

在Linux平台上,它取决于桌面环境。你只需要尝试一下。 Gnome和KDE使用不同的地方来存储Documents文件夹,恕我直言。如果您只是在那里使用FVWM,除了user.home属性之外,没有预定义的文档位置,这是一个很好的后备。

答案 4 :(得分:1)

假设这是一个需要安装的应用程序,为什么不要求用户在安装过程中指定位置。使用此信息生成运行脚本,该脚本将设置适当的环境变量。作为一种规范,用户不应该运行java命令!

当用户使用此运行脚本启动应用程序时,应用程序可以读取环境变量。

或者,使用配置文件创建一个jar文件。使用Classloader的getResourceAsStream读取配置文件。只要配置jar位于类路径下,您就可以访问这些文件。这还具有隐藏配置以防意外修改的附加优点。这也适用于文件夹(如果配置需要由用户修改)。

答案 5 :(得分:-2)

根据用户操作系统硬编码获取路径的方法有什么问题? 可能存在大的差异,OS的工作方式也不同。 只需在启动时找到基于其操作系统的文档文件夹的路径,并继续在任何需要的地方引用该路径。