How to get the Desktop path in java

JavaDesktop

Java Problem Overview


I think this will work only on an English language Windows installation:

System.getProperty("user.home") + "/Desktop";

How can I make this work for non English Windows?

Java Solutions


Solution 1 - Java

I use a french version of Windows and with it the instruction:

System.getProperty("user.home") + "/Desktop";

works fine for me.

Solution 2 - Java

I think this is the same question... but I'm not sure!:

https://stackoverflow.com/questions/570401/in-java-under-windows-how-do-i-find-a-redirected-desktop-folder

Reading it I would expect that solution to return the user.home, but apparently not, and the link in the answer comments back that up. Haven't tried it myself.

I guess by using JFileChooser the solution will require a non-headless JVM, but you are probably running one of them.

Solution 3 - Java

javax.swing.filechooser.FileSystemView.getFileSystemView().getHomeDirectory()

Solution 4 - Java

This is for Windows only. Launch REG.EXE and capture its output :

import java.io.*;
    
public class WindowsUtils {
  private static final String REGQUERY_UTIL = "reg query ";
  private static final String REGSTR_TOKEN = "REG_SZ";
  private static final String DESKTOP_FOLDER_CMD = REGQUERY_UTIL 
     + "\"HKCU\\Software\\Microsoft\\Windows\\CurrentVersion\\" 
     + "Explorer\\Shell Folders\" /v DESKTOP";
   
  private WindowsUtils() {}
        
  public static String getCurrentUserDesktopPath() {
    try {
      Process process = Runtime.getRuntime().exec(DESKTOP_FOLDER_CMD);
      StreamReader reader = new StreamReader(process.getInputStream());

      reader.start();
      process.waitFor();
      reader.join();
      String result = reader.getResult();
      int p = result.indexOf(REGSTR_TOKEN);

      if (p == -1) return null;
      return result.substring(p + REGSTR_TOKEN.length()).trim();
    }
    catch (Exception e) {
      return null;
    }
  }

  /**
   * TEST
   */
  public static void main(String[] args) {
    System.out.println("Desktop directory : " 
       + getCurrentUserDesktopPath());
  }

  
  static class StreamReader extends Thread {
    private InputStream is;
    private StringWriter sw;

    StreamReader(InputStream is) {
      this.is = is;
      sw = new StringWriter();
    }

    public void run() {
      try {
        int c;
        while ((c = is.read()) != -1)
          sw.write(c);
        }
        catch (IOException e) { ; }
      }

    String getResult() {
      return sw.toString();
    }
  }
}

or you can use JNA (complete example here)

   Shell32.INSTANCE.SHGetFolderPath(null,
      ShlObj.CSIDL_DESKTOPDIRECTORY, null, ShlObj.SHGFP_TYPE_CURRENT,
      pszPath);

Solution 5 - Java

Seems not that easy...

But you could try to find an anwser browsing the code of some open-source projects, e.g. on Koders. I guess all the solutions boil down to checking the HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders\Desktop path in the Windows registry. And probably are Windows-specific.

If you need a more general solution I would try to find an open-source application you know is working properly on different platforms and puts some icons on the user's Desktop.

Solution 6 - Java

You're just missing "C:\\Users\\":

String userDefPath = "C:\\Users\\" + System.getProperty("user.name") + "\\Desktop";

Solution 7 - Java

public class Sample {
    public static void main(String[] args) {    
        String desktopPath =System.getProperty("user.home") + "\\"+"Desktop";
        String s = "\"" + desktopPath.replace("\\","\\\\") + "\\\\" +"satis" + "\"";
        System.out.print(s);
        File f = new File(s);
        boolean mkdir = f.mkdir();
        System.out.println(mkdir);
    }
}

Solution 8 - Java

there are 2 things.

  1. you are using the wrong slash. for windows it's \ not /.
  2. i'm using RandomAccesFile and File to manage fles and folders, and it requires double slash ( \\ ) to separate the folders name.

Solution 9 - Java

Simplest solution is to find out machine name, since this name is only variable changing in path to Desktop folder. So if you can find this, you have found path to Desktop. Following code should do the trick - it did for me :)

String machine_name = InetAddress.getLocalHost().getHostName();
String path_to_desktop = "C:/Documents and Settings/"+machine_name+"/Desktop/";


  

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionjumarView Question on Stackoverflow
Solution 1 - JavaAmlaaView Answer on Stackoverflow
Solution 2 - JavaDan GravellView Answer on Stackoverflow
Solution 3 - JavamaurettoView Answer on Stackoverflow
Solution 4 - JavaRealHowToView Answer on Stackoverflow
Solution 5 - JavaGrzegorz OledzkiView Answer on Stackoverflow
Solution 6 - JavaABDO-ARView Answer on Stackoverflow
Solution 7 - JavaPrincely RoyanView Answer on Stackoverflow
Solution 8 - JavaaugugustoView Answer on Stackoverflow
Solution 9 - Javaj-cupView Answer on Stackoverflow