我认为这只适用于英语Windows安装:
System.getProperty("user.home") + "/Desktop";
如何使此功能适用于非英语Windows?
zi8p0yeb1#
我使用法语版本的Windows和它的指令:
对我来说很好。
y0u0uwnf2#
我想这是同一个问题。。但我不确定:In java under Windows, how do I find a redirected Desktop folder?阅读它时,我希望该解决方案返回user.home,但显然不是,答案注解中的链接支持这一点。我自己还没试过。我猜通过使用JFileChooser,解决方案将需要一个非无头JVM,但您可能正在运行其中之一。
JFileChooser
nkkqxpd93#
javax.swing.filechooser.FileSystemView.getFileSystemView().getHomeDirectory()
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);
nafvub8i5#
好像没那么容易……但是你可以试着在浏览一些开源项目的代码时找到一个答案,例如。在Koders上。我想所有的解决方案都归结为检查Windows注册表中的HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders\Desktop路径。可能是Windows特有的。如果你需要一个更通用的解决方案,我会尝试找到一个开源应用程序,你知道是在不同的平台上正常工作,并把一些图标在用户的桌面上。
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders\Desktop
2hh7jdfx6#
你只是缺少"C:\\Users\\":
"C:\\Users\\"
String userDefPath = "C:\\Users\\" + System.getProperty("user.name") + "\\Desktop";
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); } }
cxfofazt8#
有两件事1.你用错斜线了。Windows是\而不是/。1.我正在使用RandomAccesFile和File来管理文件夹和文件夹,它需要双斜杠(\\)来分隔文件夹名称。
\
/
\\
du7egjpx9#
最简单的解决方案是找出机器名称,因为此名称只是在Desktop文件夹路径中更改的变量。所以如果你能找到这个,你就找到了通往桌面的路径。下面的代码应该可以做到这一点-它对我来说是这样的:)
String machine_name = InetAddress.getLocalHost().getHostName(); String path_to_desktop = "C:/Documents and Settings/"+machine_name+"/Desktop/";
9条答案
按热度按时间zi8p0yeb1#
我使用法语版本的Windows和它的指令:
对我来说很好。
y0u0uwnf2#
我想这是同一个问题。。但我不确定:
In java under Windows, how do I find a redirected Desktop folder?
阅读它时,我希望该解决方案返回user.home,但显然不是,答案注解中的链接支持这一点。我自己还没试过。
我猜通过使用
JFileChooser
,解决方案将需要一个非无头JVM,但您可能正在运行其中之一。nkkqxpd93#
ej83mcc04#
这仅适用于Windows。启动REG.EXE并捕获其输出:
也可以使用JNA
nafvub8i5#
好像没那么容易……
但是你可以试着在浏览一些开源项目的代码时找到一个答案,例如。在Koders上。我想所有的解决方案都归结为检查Windows注册表中的
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders\Desktop
路径。可能是Windows特有的。如果你需要一个更通用的解决方案,我会尝试找到一个开源应用程序,你知道是在不同的平台上正常工作,并把一些图标在用户的桌面上。
2hh7jdfx6#
你只是缺少
"C:\\Users\\"
:zzlelutf7#
cxfofazt8#
有两件事
1.你用错斜线了。Windows是
\
而不是/
。1.我正在使用RandomAccesFile和File来管理文件夹和文件夹,它需要双斜杠(
\\
)来分隔文件夹名称。du7egjpx9#
最简单的解决方案是找出机器名称,因为此名称只是在Desktop文件夹路径中更改的变量。所以如果你能找到这个,你就找到了通往桌面的路径。下面的代码应该可以做到这一点-它对我来说是这样的:)