在Java中获取我的文档path

我需要使用Javafind我的文档path。 下面的代码不会给我“准确”的兴趣

System.getProperty("user.home");

其他的方式应该是什么?

PS:我不想使用JFileChooser肮脏的伎俩。

Solutions Collecting From Web of "在Java中获取我的文档path"

您可以使用注册表查询来获取它,不需要JNA或管理员权限。

 Runtime.getRuntime().exec("reg query \"HKCU\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Shell Folders\" /v personal"); 

很明显,这将失败的Windows以外的任何东西,我不确定这是否适用于Windows XP。

编辑:把这个在代码的工作序列:

 String myDocuments = null; try { Process p = Runtime.getRuntime().exec("reg query \"HKCU\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Shell Folders\" /v personal"); p.waitFor(); InputStream in = p.getInputStream(); byte[] b = new byte[in.available()]; in.read(b); in.close(); myDocuments = new String(b); myDocuments = myDocuments.split("\\s\\s+")[4]; } catch(Throwable t) { t.printStackTrace(); } System.out.println(myDocuments); 

请注意,这将锁定进程,直到“reg query”完成,这可能会造成麻烦,这取决于您正在做什么。

这很简单, JFileChooser为你找到它

 JFileChooser().getFileSystemView().getDefaultDirectory().toString(); 

我希望这可以帮助别人

由于来自@xchiltonx的最有利的答案使用JFileChooser我想补充一点,关于性能, 比使用JFileChooser 更快

 FileSystemView.getFileSystemView().getDefaultDirectory().getPath() 

在我的电脑中, JFileChooser aproach需要300ms,直接调用FileSystemView需要不到100ms。

注意 :问题是如何在Java中找到“我的文档”文件夹的可能重复

"user.home"返回用户的主目录,而不是“我的文档”文件夹。 在Windows上,对于Vista或7,它将是“C:\用户\用户名\”,对于XP可能是“C:\ Documents and Settings \ Username”

你想要的是:

 System.out.println(System.getProperty("user.home") + File.separatorChar + "My Documents"); 

这是eclipse得到用户文档文件夹

 System.getProperty("user.dir") //$NON-NLS-1$ + File.separator + "workspace") 

希望它是有用的!

使用JNA你会这样做:

 String myDocsPath = Shell32Util.getFolderPath(ShlObj.CSIDL_PERSONAL); 

JNA即时提取DLL,然后使用JNI与此DLL进行Windows API调用。 它隐藏了你所有的JNI细节。 使用JNA与使用任何其他Java库JAR一样简单。

 JFileChooser fileChooser = new JFileChooser(); fileChooser.setCurrentDirectory(new File(System.getProperty("user") + (File.separatorChar + "My Documents"))); int result = fileChooser.showOpenDialog(this); if (result == JFileChooser.APPROVE_OPTION) { File selectedFile = fileChooser.getSelectedFile(); System.out.println("Selected file: " + selectedFile.getAbsolutePath());