无论出于何种原因,我有时需要在Java程序的Windows上找到当前用户的My Documents文件夹以读取一些文件。但据我所知,没有办法做到没有严重缺陷。用Java在Windows上查找用户的My Documents文件夹的正确方法?
第一个错误的方法是:System.getProperty(“user.home”);
为什么它不会工作:
- 它只返回\用户名\文件夹;我需要添加“\ Documents \”到最后才能得到Documents文件夹......并且只能用英文。
- Sun bugs 6519127和4787931. Java通过阅读不赞成使用的注册表键*来查找桌面,然后获取父级;此方法有多个已知问题,很容易导致完全错误的文件夹被返回。错误是3.75年和8岁,没有修复。
第二个错误的方法:使用注册表读取程序来获取用户的个人文件夹,这是My Documents(但是i18n'd)。
为什么它不会工作:
虽然它修复了仅英文问题,但它仍然使用相同的已弃用的注册表区域,所以错误仍然适用于它。
不赞成使用的注册表键表示使用本机调用(SHGetKnownFolderPath),我显然无法从Java执行该调用。
第三种错误方式:
JFileChooser fr = new JFileChooser();
FileSystemView fw = fr.getFileSystemView();
File documents = fw.getDefaultDirectory();
为什么它不会工作:它的伟大工程!
除外。虽然我有一个使用这个在后台打开并运行的程序,但我打开了一个DirectX游戏(辐射:新维加斯)。 Java程序立即终止没有堆栈跟踪。总是可以重现的(对于我来说,在那场比赛中,谁知道还有什么)。找不到Sun bug#。
那么是否有任何方法可以在Windows上从Java找到用户的Documents文件夹,该文件夹没有已知问题?
(这是一个不错的大问题。)
*(关键是 “HKCU \软件\微软\的Windows \ CurrentVersion \ Explorer中\ Shell文件夹”)
同[如何找到“我的文档”文件夹中 ](http://stackoverflow.com/questions/1503555/how-to-find-my-文档文件夹)。它提到了winfoldersjava,一个围绕SHGetSpecialFolderPath的JNI包装。由于您使用的是Windows特有的功能,因此JNI应该没问题。 – 2010-11-06 18:40:36
你真的从第三种方式将这些崩溃隔离到代码段吗?因为这个方法似乎被Swings自己的打开文件对话框(JFileCHooser)使用,所以似乎很多Java应用程序都会遭受它? – 2011-03-21 14:59:41
http://stackoverflow.com/questions/1503555/how-to-find-my-documents-folder – 2012-08-28 13:35:52