无论出于何种原因,我有时需要在 Java 程序中找到当前用户在 Windows 上的 My Documents 文件夹来读取一些文件。但据我所知,没有任何方法可以做到不存在严重缺陷。
第一种错误方式:System.getProperty("user.home");
为什么它不起作用:
- 它只返回 \username\ 文件夹;我需要在末尾添加“\Documents\”以获取 Documents 文件夹......而且这只适用于英文。
- Sun 错误 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 中找到没有已知问题的用户 Documents 文件夹?
(这是一个很好的大问题。)
*(密钥为“HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders”)