首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用Java在Windows上查找用户的“我的文档”文件夹的正确方法?

用Java在Windows上查找用户的“我的文档”文件夹的正确方法?
EN

Stack Overflow用户
提问于 2010-11-06 18:35:53
回答 4查看 12.5K关注 0票数 13

出于任何原因,我有时需要在Java程序中找到当前用户在Windows上的“我的文档”文件夹来读取一些文件。但据我所知,没有办法做到不存在严重缺陷。

第一个错误的方向: System.getProperty("user.home");

为什么它不能工作:

  • 它只返回\username\文件夹;我需要将"\ Documents \“添加到末尾,以获得Document文件夹.而这只适用于英语。
  • 太阳虫6519127和4787931。Java在Windows上查找用户主文件夹,方法是读取一个不推荐的注册表项*以找到桌面,然后获取父目录;此方法存在多个已知问题,很容易导致返回一个完全错误的文件夹。这些bug是3.75岁和8岁,没有修复。

第二个错误的方法是:使用注册表读取程序获取用户的个人文件夹,这是我的文档(但我有18n个)。

为什么它不能工作:

虽然它解决了只使用英语的问题,但它仍然使用相同的不推荐注册区域,所以bug仍然适用于它。

不推荐的注册表项要求使用本机调用(SHGetKnownFolderPath),显然我无法从Java中这样做。

第三个错误的方向:

代码语言:javascript
复制
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文件夹“)

EN

回答 4

Stack Overflow用户

发布于 2010-11-07 00:27:29

没有纯粹的java方法来完成它,但是您可以使用JNI上的JNA包装器来完成它,而不必自己编写任何本机代码。下面是一个很好的例子,说明如何在Windows上获得响应的一半的Documents文件夹:

在Java中找到用户主目录的最佳方法是什么?

票数 4
EN

Stack Overflow用户

发布于 2012-07-14 18:40:57

查找windows用户的“文档”文件夹的一种耗时但可靠的方法是:让您的java应用程序执行一个bat脚本,该脚本使用Reg.exe (一个windows系统文件)查找包含路径的reg键的值。然后在同一个bat文件中使用管道将数据发送到windows命令提示符所具有的'findstr‘函数。使用另一个管道将返回的值输出到文本文件。然后,只需让您的java应用程序读取该文本文件,并在它完成后删除它:)对我来说已经足够好了。

bat文件的代码:

代码语言:javascript
复制
@ echo off

Title Find Documents Folder

Reg Query "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" |findstr "Personal">>DocPath.dat

exit
票数 3
EN

Stack Overflow用户

发布于 2010-11-06 18:43:04

有些人构建了一个定制的Java (他们的网站不再工作),但是Google代码中仍然保留着代码:

1.1.zip

有两个DLL需要引用,每个体系结构一个(x86和x64)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4114543

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档