Ich denke, das nur auf einer englischsprachige Windows-Installation funktionieren:Wie den Desktop-Pfad in Java erhalten
System.getProperty("user.home") + "/Desktop";
Wie kann ich diese Arbeit für nicht englisches Windows machen?
Ich denke, das nur auf einer englischsprachige Windows-Installation funktionieren:Wie den Desktop-Pfad in Java erhalten
System.getProperty("user.home") + "/Desktop";
Wie kann ich diese Arbeit für nicht englisches Windows machen?
scheint nicht so einfach ...
Aber Sie könnten versuchen, eine anwser gerade den Code einiger Open-Source-Projekte zu finden, zum Beispiel auf Koders. Ich denke, dass alle Lösungen dazu führen, den HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders\Desktop
Pfad in der Windows-Registrierung zu überprüfen. Und wahrscheinlich sind Windows-spezifisch.
Wenn Sie eine allgemeinere Lösung benötigen, würde ich versuchen, eine Open-Source-Anwendung zu finden, von der Sie wissen, dass sie auf verschiedenen Plattformen ordnungsgemäß funktioniert, und einige Symbole auf dem Desktop des Benutzers platziert.
Ich denke, dies ist die gleiche Frage ... aber ich bin mir nicht sicher !:
In java under Windows, how do I find a redirected Desktop folder?
es lesen würde ich diese Lösung erwartet, dass die user.home zurückzukehren, aber anscheinend nicht, und Der Link in der Antwort gibt das zurück. Habe es nicht selbst ausprobiert.
Ich denke, mit JFileChooser
wird die Lösung eine JVM ohne Kopf erfordern, aber Sie laufen wahrscheinlich eine von ihnen.
Dies ist nur für Windows. Starten Sie REG.EXE und erfassen ihre Ausgabe:
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();
}
}
}
oder Sie können JNA verwenden (complete example here)
Shell32.INSTANCE.SHGetFolderPath(null,
ShlObj.CSIDL_DESKTOPDIRECTORY, null, ShlObj.SHGFP_TYPE_CURRENT,
pszPath);
Die Verwendung von JNA ist viel besser als das Aufrufen eines Prozesses und das Analysieren des Ergebnisses. – Sebastian
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);
}
}
Dies würde nur die englische Version zurückgeben, was das OP nicht möchte. – asteri
Tun Sie das nicht. Wenn der Benutzer den Desktop verschoben hat, funktioniert das nicht! Wenn Sie einen Solid State C: -Laufwerk haben, ist es üblich, den Desktop auf ein anderes Laufwerk zu verschieben. Dies stoppt viele Schreibvorgänge auf der SSD (Lesevorgänge reduzieren nicht die Lebensdauer, schreibt nicht) und es bedeutet, dass Sie ein kleines Laufwerk C: und ein großes normales haben können. –
Ich benutze eine Französisch-Version von Windows und mit ihm die Anweisung:
System.getProperty("user.home") + "/Desktop";
funktioniert gut für mich.
Tun Sie das nicht. Wenn der Benutzer den Desktop verschoben hat, funktioniert das nicht! Wenn Sie einen Solid State C: -Laufwerk haben, ist es üblich, den Desktop auf ein anderes Laufwerk zu verschieben. Dies stoppt viele Schreibvorgänge auf der SSD (Lesevorgänge reduzieren nicht die Lebensdauer, schreibt nicht) und es bedeutet, dass Sie ein kleines Laufwerk C: und ein großes normales haben können. –
Die einfachste Lösung ist, den Computernamen herauszufinden, da dieser Name nur eine Variable ist, die sich im Pfad zum Desktop-Ordner ändert. Wenn Sie das also finden können, haben Sie den Pfad zum Desktop gefunden. Der folgende Code sollte den Trick - es tat für mich :)
String machine_name = InetAddress.getLocalHost().getHostName();
String path_to_desktop = "C:/Documents and Settings/"+machine_name+"/Desktop/";
gibt es 2 Dinge.
\
nicht /
.\\
), um den Namen des Ordners zu trennen.Viele Java-Klassen akzeptieren/als Trennzeichen. Dies ist absolut gültig: Datei f = neue Datei ("S: /folder/file.txt"); –
Ihr Schrägstrich ist nicht korrekt. Du solltest es so benutzen.
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");
}
javax.swing.filechooser.FileSystemView.getFileSystemView().getHomeDirectory()
Der oben genannte Link gibt die richtige Antwort. 'File home = FileSystemView.getFileSystemView(). GetHomeDirectory();' und dann, wenn Sie es als String 'home brauchen.getAbsolutePath(); ' –