我想把文件保存在用户的“我的文档”文件夹中。
我尝试通过以下方式获取该位置:
System.getenv("USERPROFILE") + "\\My Documents\\"
后来我意识到,在语言设置为另一种语言,例如法语的系统中,这种方法不起作用。
有没有其他有效获取“我的文档”文件夹的方法?
关于性能,这比使用JFileChooser
更快:
FileSystemView.getFileSystemView().getDefaultDirectory().getPath()
在我的电脑上,使用JFileChooser
方法需要300毫秒,而直接调用FileSystemView
需要不到100毫秒。
如果你不介意依赖于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());
}
}
有一个winfoldersjava JNI扩展可以在Java中访问特殊文件夹名称。
winfoldersjava页面还介绍了另一种使用Swing的方法:
此外,如果您只需要“My documents”路径并且不介意触摸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
不确定实际位置是哪一个,但其中之一。