desktop móviles - Cómo obtener la ruta de escritorio en Java





edición desarrollo (9)


Utilizo una versión francesa de Windows y con ella las instrucciones:

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

funciona bien para mí

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



Parece que no es tan fácil ...

Pero podría intentar encontrar un buscador que explore el código de algunos proyectos de código abierto, por ejemplo, en Koders . Creo que todas las soluciones se reducen a comprobar la ruta HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders\Desktop en el registro de Windows. Y probablemente sean específicos de Windows.

Si necesita una solución más general, trataría de encontrar una aplicación de código abierto que sepa que está funcionando correctamente en diferentes plataformas y coloca algunos íconos en el escritorio del usuario.




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.




hay 2 cosas

  1. estás usando la barra equivocada. para windows es \ not / .
  2. Estoy usando RandomAccesFile y File para administrar archivos y carpetas, y se requiere doble barra ( \\ ) para separar el nombre de las carpetas.



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



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



La respuesta de David proporciona el significado de cada modificador de acceso. En cuanto a cuándo usar cada una, sugeriría hacer públicas todas las clases y los métodos de cada clase que están destinados para uso externo (su API), y todo lo demás privado.

Con el tiempo, sabrá cuándo hacer que algunas clases sean privadas para el paquete y cuándo declarar ciertos métodos protegidos para su uso en subclases.







java desktop