Penso che questo funziona solo su una lingua di installazione di Windows inglese:Come ottenere il percorso desktop in Java
System.getProperty("user.home") + "/Desktop";
Come posso fare questo lavoro per Windows non inglese?
Penso che questo funziona solo su una lingua di installazione di Windows inglese:Come ottenere il percorso desktop in Java
System.getProperty("user.home") + "/Desktop";
Come posso fare questo lavoro per Windows non inglese?
non sembra che facile ...
Ma si potrebbe provare a trovare un'anwser navigando il codice di alcuni progetti open-source, per esempio su Koders. Immagino che tutte le soluzioni si riducano a verificare il percorso HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders\Desktop
nel registro di Windows. E probabilmente sono specifici per Windows.
Se è necessaria una soluzione più generale, proverei a trovare un'applicazione open source che funzioni correttamente su piattaforme diverse e inserisce alcune icone nel desktop dell'utente.
penso che questo sia la stessa domanda ... ma non sono sicuro !:
In java under Windows, how do I find a redirected Desktop folder?
Leggendolo mi aspetterei che la soluzione per riportare l'user.home, ma a quanto pare non, e il link nella risposta commenta. Non l'ho provato da solo.
Suppongo che utilizzando JFileChooser
la soluzione richiederà una JVM non headless, ma probabilmente si sta eseguendo uno di essi.
Questo è solo per Windows. Avviare REG.EXE e catturare la sua uscita:
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();
}
}
}
oppure è possibile utilizzare JNA (complete example here)
Shell32.INSTANCE.SHGetFolderPath(null,
ShlObj.CSIDL_DESKTOPDIRECTORY, null, ShlObj.SHGFP_TYPE_CURRENT,
pszPath);
L'utilizzo di JNA è molto meglio che chiamare un processo e analizzare il risultato. – 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);
}
}
Questo restituirebbe solo la versione inglese, che non è ciò che l'OP vuole. – asteri
Non farlo. Se l'utente ha spostato il desktop, questo non funzionerà! Se si dispone di uno stato solido C: guidare è abbastanza comune spostare il desktop su un'unità diversa. Questo interrompe molte scritture sull'SSD (le letture non riducono la durata, le scritture lo fanno) e significa che puoi avere una piccola unità C: e una grande normale. –
Io uso una versione francese di Windows e con essa l'istruzione:
System.getProperty("user.home") + "/Desktop";
funziona bene per me.
Non farlo. Se l'utente ha spostato il desktop, questo non funzionerà! Se si dispone di uno stato solido C: guidare è abbastanza comune spostare il desktop su un'unità diversa. Questo interrompe molte scritture sull'SSD (le letture non riducono la durata, le scritture lo fanno) e significa che puoi avere una piccola unità C: e una grande normale. –
La soluzione più semplice è trovare il nome del computer, poiché questo nome cambia solo in modo variabile nel percorso della cartella Desktop. Quindi, se riesci a trovarlo, hai trovato il percorso per Desktop. Il seguente codice dovrebbe fare il trucco - lo ha fatto per me :)
String machine_name = InetAddress.getLocalHost().getHostName();
String path_to_desktop = "C:/Documents and Settings/"+machine_name+"/Desktop/";
ci sono 2 cose.
\
non /
.\\
) per separare il nome delle cartelle.Un sacco di classi java accettano/come separatore. Ciò è perfettamente valido: File f = new File ("S: /folder/file.txt"); –
La tua barra non è corretta. Dovresti usarlo in questo modo.
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()
Il link di cui sopra dà la risposta corretta. 'File home = FileSystemView.getFileSystemView(). GetHomeDirectory();' e quindi se ne hai bisogno come stringa 'home.getAbsolutePath(); ' –