Cómo obtener la ruta de escritorio en Java


Answers

Creo que esta es la misma pregunta ... ¡pero no estoy seguro!

En Java en Windows, ¿cómo puedo encontrar una carpeta de Escritorio redirigida?

Al leerlo, esperaría que esa solución devuelva el usuario.hogar, pero aparentemente no, y el enlace en la respuesta comenta eso. No lo he probado yo mismo.

Supongo que al usar JFileChooser la solución requerirá una JVM no sin cabeza, pero probablemente estés ejecutando una de ellas.

Question

Creo que esto funcionará solo en una instalación de Windows en inglés:

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

¿Cómo puedo hacer que esto funcione para Windows que no es inglés?




Tu barra no es correcta. Deberías usarlo así.

      try{
            String sys = System.getProperty("user.home");

            String fileurl = sys+ "\\Desktop\\new";
            File newfile = new File(fileurl);
            newfile.mkdir();

            }catch(Exception ioe){
             // Handle the error
                System.out.println("Error");
            }



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



Esto es solo para Windows. Inicie REG.EXE y capture su salida:

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

o puede usar JNA ( complete el ejemplo aquí )

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