出于任何原因,我有时需要在Java程序中找到当前用户在Windows上的“我的文档”文件夹来读取一些文件。但据我所知,没有办法做到不存在严重缺陷。
第一个错误的方向: System.getProperty("user.home");
为什么它不能工作:
第二个错误的方法是:使用注册表读取程序获取用户的个人文件夹,这是我的文档(但我有18n个)。
为什么它不能工作:
虽然它解决了只使用英语的问题,但它仍然使用相同的不推荐注册区域,所以bug仍然适用于它。
不推荐的注册表项要求使用本机调用(SHGetKnownFolderPath),显然我无法从Java中这样做。
第三个错误的方向:
JFileChooser fr = new JFileChooser();
FileSystemView fw = fr.getFileSystemView();
File documents = fw.getDefaultDirectory();为什么它不能工作:它的工作很好!
当我有一个在后台使用这个打开并运行的程序时,我打开了一个DirectX游戏(Fallout: New )。Java程序立即结束,没有堆栈跟踪。总是可以复制的(对我来说,谁知道还有什么)。找不到太阳bug#。
那么,是否有任何方法可以在Windows上从Java中找到用户的文档文件夹,而这些文件夹并不存在已知的问题?
(这是个不错的大问题。)
*(密钥是"HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell文件夹“)
发布于 2010-11-07 00:27:29
没有纯粹的java方法来完成它,但是您可以使用JNI上的JNA包装器来完成它,而不必自己编写任何本机代码。下面是一个很好的例子,说明如何在Windows上获得响应的一半的Documents文件夹:
发布于 2012-07-14 18:40:57
查找windows用户的“文档”文件夹的一种耗时但可靠的方法是:让您的java应用程序执行一个bat脚本,该脚本使用Reg.exe (一个windows系统文件)查找包含路径的reg键的值。然后在同一个bat文件中使用管道将数据发送到windows命令提示符所具有的'findstr‘函数。使用另一个管道将返回的值输出到文本文件。然后,只需让您的java应用程序读取该文本文件,并在它完成后删除它:)对我来说已经足够好了。
bat文件的代码:
@ echo off
Title Find Documents Folder
Reg Query "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" |findstr "Personal">>DocPath.dat
exit发布于 2010-11-06 18:43:04
有些人构建了一个定制的Java (他们的网站不再工作),但是Google代码中仍然保留着代码:
1.1.zip
有两个DLL需要引用,每个体系结构一个(x86和x64)。
https://stackoverflow.com/questions/4114543
复制相似问题