IT story

Java에서 데스크탑 경로를 얻는 방법

hot-time 2020. 12. 31. 22:55
반응형

Java에서 데스크탑 경로를 얻는 방법


영어 Windows 설치에서만 작동한다고 생각합니다.

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

영어가 아닌 Windows에서이 작업을 수행하려면 어떻게해야합니까?


프랑스 버전의 Windows를 사용하고 지침과 함께 :

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

나를 위해 잘 작동합니다.


나는 이것이 같은 질문이라고 생각합니다 ...하지만 확실하지 않습니다! :

Windows의 Java에서 리디렉션 된 데스크톱 폴더를 어떻게 찾습니까?

그것을 읽으면 그 솔루션이 user.home을 반환 할 것으로 기대하지만 분명히 그렇지 않으며 답변의 링크가 그것을 뒷받침합니다. 직접 시도하지 않았습니다.

JFileChooser솔루션 을 사용 하면 헤드리스가 아닌 JVM이 필요하지만 아마도 그중 하나를 실행하고있을 것입니다.


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

이것은 Windows 전용입니다. REG.EXE를 시작하고 출력을 캡처합니다.

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

또는 JNA를 사용할 수 있습니다 ( 여기에 전체 예제 ).

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

그렇게 쉽지 않은 것 같네요 ...

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.


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

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.

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/";

ReferenceURL : https://stackoverflow.com/questions/1080634/how-to-get-the-desktop-path-in-java

반응형