Getting My Documents path in Java

后端 未结 8 1270
孤城傲影
孤城傲影 2020-12-06 04:21

I need to find my documents path using Java. The following code doesn\'t give me \"accurate\" loation

System.getProperty(\"user.home\");

What sh

相关标签:
8条回答
  • 2020-12-06 04:53

    Since the most upvoted answer from @xchiltonx uses JFileChooser I would like to add that, regarding performance, this is faster than using JFileChooser:

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

    In my PC, JFileChooser aproach needed 300ms, and calling FileSystemView directly needed less than 100ms.

    Note: The question is a possible duplicate of How to find “My Documents” folder in Java

    0 讨论(0)
  • 2020-12-06 04:53
    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());
    
    0 讨论(0)
  • 2020-12-06 04:56

    That's easy, JFileChooser finds it for you

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

    I hope this helps someone

    0 讨论(0)
  • 2020-12-06 04:56

    "user.home" returns the home directory of the user, not the "My Documents" folder. On Windows, it would be "C:\Users\Username\" for Vista or 7, or "C:\Documents and Settings\Username" for XP

    What you want is:

    System.out.println(System.getProperty("user.home") + File.separatorChar + "My Documents");
    
    0 讨论(0)
  • 2020-12-06 05:03

    this is what eclipse does to get the user document folder

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

    Hope it's helpfull!

    0 讨论(0)
  • 2020-12-06 05:16

    You can get it using a registry query, no need for JNA or admin rights for that.

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

    Obviously this will fail on anything other than Windows, and I am not certain whether this works for Windows XP.

    EDIT: Put this in a working sequence of code:

    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);
    

    Note this will lock the process until "reg query" is done, which might cause trouble dependeing on what you are doing.

    0 讨论(0)
提交回复
热议问题