如何使用Java获取独立于OS的系统用户文档,图片,音乐文件夹?

时间:2010-05-24 11:31:36

标签: java cross-platform

当我正在处理我的项目时,我收到了一个要求:我需要获取系统用户文档文件夹(例如Windows的“我的文档”和Linux和Mac OS X的“文档”)。我需要为所有操作系统获取它。我怎样才能做到这一点?

我可以使用System.getProperty("user.home")获取用户根目录。我需要使用Java来满足此要求的解决方案。

4 个答案:

答案 0 :(得分:3)

默认系统“Documents”或“Pictures”文件夹的位置取决于操作系统,取决于分发,取决于用户设置。我能想到的最接近的事情是开始查看可以从System.getProperty("user.home")获得的用户主目录。

然后,您可以基于

实现一些启发式方法
  • System.getProperty("os.name")操作系统名称
  • System.getProperty("os.arch")操作系统架构(应该不那么有趣)
  • System.getProperty("os.version")操作系统版本

答案 1 :(得分:1)

我相信Java目前不提供此类功能,因此您必须实现自己的抽象,可以使用系统属性来检测运行时平台并为当前平台选择合适的工厂。然后工厂将返回特定于平台的文件夹。

答案 2 :(得分:1)

这不仅在操作系统与操作系统之间有所不同,而且因用户而异。我的建议是为这些位置创建一个通用名称的优先级列表,然后搜索列表,返回列表中存在的第一个目录。如果列表中没有任何元素存在,那么您将报告此目录不存在或提供其他类型的错误消息。在默认列表不足的情况下,提供配置文件或其他一些可以覆盖默认搜索的方法也可能不错。

答案 3 :(得分:0)

现有的答案没有错,但是缺少一些细节。 SO上有更完整的答案,但对于最相关的操作系统,一般都没有答案。

  • Windows:要走的路似乎是使用this answerHow do I get the Users Music Directory?中提到的data:text/html, <html contenteditable><h1><script language="JavaScript">today = new Date(); document.write(today.getDate(),"/", today.getMonth()+1,"/",today.getFullYear());</script>&nbsp;&nbsp;&nbsp;&nbsp;<input type="button" value="Print" onclick="window.print()" /></h1><br/></html> (或等效的库调用,取决于Windows版本)。
  • Linux(可能还有Solaris和* Bsd):SHGetFolderPath(可执行)是正确的工具。 Using XDG directory specification on Java applicationjava-gnomexdg-java)的答案中列出了可能的集成。
  • Mac OS:仅提供类似Unix的xdg-user-dir(= $HOME系统属性)。

作为另一个参考点:user.home在映射操作系统之间等效的特殊文件夹:https://github.com/dotnet/corefx/blob/master/src/System.Runtime.Extensions/src/System/Environment.Unix.cs.Net Core)上付出了很多努力。

John Koerner compares the actual locations of these special folders between Windows and Mac OS X