Come trovare la cartella "I miei documenti" in Java
Sono disposto a salvare un file nella cartella "Documenti" dell'utente.
Ho provato a ottenere la posizione in questo modo:
System.getenv("USERPROFILE") + "\\My Documents\\"
Quindi, mi sono reso conto che questo non avrebbe funzionato in un sistema in cui la lingua è impostata su un'altra lingua, ad esempio il francese.
Esiste un altro modo per ottenere la cartella "Documenti" in modo efficiente?
5 answers
Se non ti dispiace dipendere dallo Swing, puoi apparentemente usare questo trucco:
import javax.swing.JFileChooser;
javax.swing.filechooser.FileSystemView;
public class GetMyDocuments {
public static void main(String args[]) {
JFileChooser fr = new JFileChooser();
FileSystemView fw = fr.getFileSystemView();
System.out.println(fw.getDefaultDirectory());
}
}
Per quanto riguarda le prestazioni, questo è più veloce rispetto all'utilizzo di JFileChooser
:
FileSystemView.getFileSystemView().getDefaultDirectory().getPath()
Nel mio PC, l'approccio JFileChooser
richiedeva 300 ms e chiamare FileSystemView
direttamente richiedeva meno di 100 ms.
C'è estensione winfoldersjava JNI per accedere a nomi di cartelle speciali in Java.
La pagina winfoldersjava descrive anche un altro metodo che utilizza Swing:
Inoltre, se hai bisogno solo del percorso "I miei documenti" e non ti dispiace toccare Swing potresti non aver bisogno di WinFoldersJava. Puoi usare javax.swing.filechooser.Visualizzazione del sistema di file.getFileSystemView ().getDefaultDirectory() invece.
Dai un'occhiata a http://technet.microsoft.com/en-us/library/cc749369 (WS.10).aspx
La posizione per quella directory può essere modificata da ciascun utente, quindi non dipende solo dalle impostazioni locali.
Per trovare dove si trova quella cartella, devi guardare nel registro di sistema.
Il comando Windows per farlo è:
reg query "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\User
Shell Folders" /v personal
O
reg query "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell
Folders" /v personal
Non sono sicuro di quale posizione in realtà, ma è uno di loro.