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?




La solución más simple es encontrar el nombre de la máquina, ya que este nombre solo cambia de forma variable en la ruta a la carpeta del Escritorio. Entonces, si puede encontrar esto, ha encontrado la ruta al Escritorio. El siguiente código debería hacer el truco - lo hizo por mí :)

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



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



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



Links



Tags

java java   desktop