在Windows上使用Java查找用户的“我的文档”文件夹的正确方法?
无论出于何种原因,我有时需要在Java程序中找到当前用户在Windows上的“我的文档”文件夹才能读取一些文件。但据我所知,没有办法做到这一点没有严重的缺陷。
第一个错误的方法:System.getProperty(“user.home”);
为什么它不起作用:
- 它只返回 \username\ 文件夹;我需要将“\Documents\”添加到末尾才能获得“文档”文件夹...这只适用于英语。
- 太阳虫子6519127和4787931。Java通过读取已弃用的注册表项*来查找桌面,然后获取父文件夹,从而在Windows上查找用户主文件夹;此方法具有多个已知问题,这些问题很容易导致返回完全错误的文件夹。这些错误是3.75年和8年,没有修复。
第二种错误的方法:使用注册表读取程序获取用户的个人文件夹,即“我的文档”(但 i18n'd)。
为什么它不起作用:
虽然它修复了仅英语的问题,但它仍然使用相同的已弃用的注册表区域,因此错误仍然适用于它。
不推荐使用的注册表项说要使用本机调用(SHGetKnownFolderPath),这显然不能从Java中完成。
第三个错误的方式:
JFileChooser fr = new JFileChooser();
FileSystemView fw = fr.getFileSystemView();
File documents = fw.getDefaultDirectory();
为什么它不起作用:它工作得很好!
除非它没有。虽然我有一个程序使用它打开并在后台运行,但我打开了一个DirectX游戏(辐射:新拉斯维加斯)。Java 程序立即终止,没有堆栈跟踪。总是可重复的(对我来说在那个游戏上,谁知道还有什么)。找不到 Sun 错误#。
那么,有没有办法在Windows上从Java上找到用户的“文档”文件夹,该文件夹没有已知问题?
(这是一个不错的大问题。
*(关键是“HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders”)