【发布时间】:2009-10-01 12:03:20
【问题描述】:
我愿意在用户的“我的文档”文件夹中保存一个文件。
我尝试这样获取位置:
System.getenv("USERPROFILE") + "\\My Documents\\"
然后,我意识到这在语言设置为另一种语言(例如法语)的系统中是行不通的。
还有其他有效获取“我的文档”文件夹的方法吗?
【问题讨论】:
我愿意在用户的“我的文档”文件夹中保存一个文件。
我尝试这样获取位置:
System.getenv("USERPROFILE") + "\\My Documents\\"
然后,我意识到这在语言设置为另一种语言(例如法语)的系统中是行不通的。
还有其他有效获取“我的文档”文件夹的方法吗?
【问题讨论】:
关于性能,这比使用JFileChooser 更快:
FileSystemView.getFileSystemView().getDefaultDirectory().getPath()
在我的电脑上,JFileChooser 方法需要 300ms,直接调用FileSystemView 需要不到 100ms。
【讨论】:
winfoldersjava JNI extension 用于访问 Java 中的特殊文件夹名称。
winfoldersjava 页面还描述了另一种使用 Swing 的方法:
另外,如果您只需要“我的文档”路径并且不介意触摸 Swing,则可能不需要 WinFoldersJava。您可以改用 javax.swing.filechooser.FileSystemView.getFileSystemView().getDefaultDirectory() 。
【讨论】:
如果你不介意依赖 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());
}
}
【讨论】:
每个用户都可以更改该目录的位置,因此它不仅仅取决于语言环境。
要查找该文件夹的位置,您必须查看注册表。
执行此操作的 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
不确定实际上是哪个位置,但它是其中之一。
【讨论】:
reg 运行的软件(正是我的工作场景)。
【讨论】: