在Java中获取我的文档路径

时间:2012-03-13 02:40:37

标签: java windows

我需要使用Java找到我的文档路径。以下代码不会给我“准确”的承诺

System.getProperty("user.home");

反过来应该是什么?

P.S: 我不想使用JFileChooser Dirty技巧。

7 个答案:

答案 0 :(得分:28)

这很容易,JFileChooser为你找到它

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

我希望这有助于某人

答案 1 :(得分:9)

您可以使用注册表查询来获取它,不需要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”完成,这可能会导致依赖于您正在执行的操作时出现问题。

答案 2 :(得分:2)

使用JNA你会这样做:

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

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

答案 3 :(得分:1)

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

你想要的是:

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

答案 4 :(得分:0)

这就是eclipse用来获取用户文档文件夹的方法

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

希望它有用!

答案 5 :(得分:0)

我发现最好的方法是使用AWT:

ShellFolder.get("fileChooserDefaultFolder");

我已将我的Documents文件夹重定向到D:驱动器,并且它成功获取了该目录。它也可以在大约40毫秒(在我的机器上)上完成。使用FileSystemView大约需要48毫秒,而new JFileChooser()大约需要250毫秒。

这三种方法实际上都是在后台使用ShellFolder,与FileSystemView的区别可以忽略不计,但是直接调用它可以避免其他两种开销。

注意:,您也可以将其直接转换为File,而不是隐式获取它的toString()方法,这可以为您提供进一步的帮助:

File documents = (File) ShellFolder.get("fileChooserDefaultFolder");

答案 6 :(得分:-3)

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());
相关问题