如何在java中获取桌面路径

tpxzln5u  于 2023-05-05  发布在  Java
关注(0)|答案(9)|浏览(121)

我认为这只适用于英语Windows安装:

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

如何使此功能适用于非英语Windows?

zi8p0yeb

zi8p0yeb1#

我使用法语版本的Windows和它的指令:

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

对我来说很好。

y0u0uwnf

y0u0uwnf2#

我想这是同一个问题。。但我不确定:
In java under Windows, how do I find a redirected Desktop folder?
阅读它时,我希望该解决方案返回user.home,但显然不是,答案注解中的链接支持这一点。我自己还没试过。
我猜通过使用JFileChooser,解决方案将需要一个非无头JVM,但您可能正在运行其中之一。

nkkqxpd9

nkkqxpd93#

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

ej83mcc04#

这仅适用于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);
nafvub8i

nafvub8i5#

好像没那么容易……
但是你可以试着在浏览一些开源项目的代码时找到一个答案,例如。在Koders上。我想所有的解决方案都归结为检查Windows注册表中的HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders\Desktop路径。可能是Windows特有的。
如果你需要一个更通用的解决方案,我会尝试找到一个开源应用程序,你知道是在不同的平台上正常工作,并把一些图标在用户的桌面上。

2hh7jdfx

2hh7jdfx6#

你只是缺少"C:\\Users\\"

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

zzlelutf7#

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

cxfofazt8#

有两件事
1.你用错斜线了。Windows是\而不是/
1.我正在使用RandomAccesFile和File来管理文件夹和文件夹,它需要双斜杠(\\)来分隔文件夹名称。

du7egjpx

du7egjpx9#

最简单的解决方案是找出机器名称,因为此名称只是在Desktop文件夹路径中更改的变量。所以如果你能找到这个,你就找到了通往桌面的路径。下面的代码应该可以做到这一点-它对我来说是这样的:)

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

相关问题