如何在Java中find“我的文档”文件夹

我愿意将文件保存在用户的“我的文档”文件夹中。

我试图得到这样的位置:

System.getenv("USERPROFILE") + "\\My Documents\\" 

然后,我意识到这不适用于语言设置为其他语言的系统,例如法语。

是否有另一种方法有效地获取“我的文档”文件夹?

如果你不介意依靠Swing,你可以使用这个技巧:

 import javax.swing.JFileChooser; javax.swing.filechooser.FileSystemView; public class GetMyDocuments { public static void main(String args[]) { JFileChooser fr = new JFileChooser(); FileSystemView fw = fr.getFileSystemView(); System.out.println(fw.getDefaultDirectory()); } } 

(来源: http : //www.rgagnon.com/javadetails/java-0572.html )

关于性能, 比使用JFileChooser 更快

 FileSystemView.getFileSystemView().getDefaultDirectory().getPath() 

在我的PC中, JFileChooser方法需要300ms,调用FileSystemView直接需要不到100ms。

有用于访问Java中的特殊文件夹名称的winfoldersjava JNI扩展 。

winfoldersjava页面还介绍了使用Swing的另一种方法:

此外,如果您只需要“我的文档”路径,不介意触摸Swing,则可能不需要WinFoldersJava。 您可以使用javax.swing.filechooser.FileSystemView.getFileSystemView()。getDefaultDirectory()来代替。

该目录的位置可以由每个用户改变,所以它不仅仅依赖于语言环境。
要找到该文件夹​​的位置,您必须查看注册表。 Windows命令是这样做的:

 reg query "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders" /v personal 

要么

 reg query "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" /v personal 

不确定实际上哪个位置,但它是其中之一。