当我正在处理我的项目时,我收到了一个要求:我需要获取系统用户文档文件夹(例如Windows的“我的文档”和Linux和Mac OS X的“文档”)。我需要为所有操作系统获取它。我怎样才能做到这一点?
我可以使用System.getProperty("user.home")
获取用户根目录。我需要使用Java来满足此要求的解决方案。
答案 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上有更完整的答案,但对于最相关的操作系统,一般都没有答案。
data:text/html, <html contenteditable><h1><script language="JavaScript">today = new Date(); document.write(today.getDate(),"/", today.getMonth()+1,"/",today.getFullYear());</script> <input type="button" value="Print" onclick="window.print()" /></h1><br/></html>
(或等效的库调用,取决于Windows版本)。SHGetFolderPath
(可执行)是正确的工具。 Using XDG directory specification on Java application(java-gnome,xdg-java)的答案中列出了可能的集成。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。