Ottenere il percorso dei miei documenti in Java
Ho bisogno di trovare il percorso dei miei documenti usando Java. Il seguente codice non mi dà una loazione "accurata"
System.getProperty("user.home");
Quale dovrebbe essere il contrario?
P. S: Non voglio usare il trucco sporco di JFileChooser.
7 answers
Puoi ottenerlo usando una query del registro di sistema, senza bisogno di diritti JNA o admin per questo.
Runtime.getRuntime().exec("reg query \"HKCU\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Shell
Folders\" /v personal");
Ovviamente questo fallirà su qualcosa di diverso da Windows, e non sono sicuro che funzioni per Windows XP.
MODIFICA: Metti questo in una sequenza di lavoro di codice:
String myDocuments = null;
try {
Process p = Runtime.getRuntime().exec("reg query \"HKCU\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Shell Folders\" /v personal");
p.waitFor();
InputStream in = p.getInputStream();
byte[] b = new byte[in.available()];
in.read(b);
in.close();
myDocuments = new String(b);
myDocuments = myDocuments.split("\\s\\s+")[4];
} catch(Throwable t) {
t.printStackTrace();
}
System.out.println(myDocuments);
Nota questo bloccherà il processo fino a quando non verrà eseguita la "query reg", il che potrebbe causare problemi a seconda di ciò che si sta facendo.
È facile, JFileChooser
lo trova per te
new JFileChooser().getFileSystemView().getDefaultDirectory().toString();
Spero che questo aiuti qualcuno
Poiché la risposta più upvoted da @xchiltonx utilizza JFileChooser
Vorrei aggiungere che, per quanto riguarda le prestazioni, questo è più veloce rispetto all'utilizzo di JFileChooser
:
FileSystemView.getFileSystemView().getDefaultDirectory().getPath()
Nel mio PC, JFileChooser
aproach aveva bisogno di 300 ms e chiamare FileSystemView
direttamente aveva bisogno di meno di 100 ms.
Nota : La domanda è un possibile duplicato di Come trovare la cartella "Documenti" in Java
Usando JNA faresti questo:
String myDocsPath = Shell32Util.getFolderPath(ShlObj.CSIDL_PERSONAL);
JNA estrae una DLL al volo e quindi utilizza JNI con questa DLL per effettuare chiamate API di Windows. Si nasconde tutti i dettagli JNI da voi però. Usare JNA è facile come usare qualsiasi altro JAR della libreria java.
"user.home"
restituisce la directory home dell'utente, non la cartella "Documenti".
Su Windows, sarebbe "C:\Users\Username\" per Vista o 7, o "C:\Documents e Impostazioni \ Username" per XP
Quello che vuoi è:
System.out.println(System.getProperty("user.home") + File.separatorChar + "My Documents");
Questo è ciò che eclipse fa per ottenere la cartella del documento utente
System.getProperty("user.dir") //$NON-NLS-1$
+ File.separator + "workspace")
Spero che sia utile!
JFileChooser fileChooser = new JFileChooser();
fileChooser.setCurrentDirectory(new File(System.getProperty("user") + (File.separatorChar + "My Documents")));
int result = fileChooser.showOpenDialog(this);
if (result == JFileChooser.APPROVE_OPTION) {
File selectedFile = fileChooser.getSelectedFile();
System.out.println("Selected file: " + selectedFile.getAbsolutePath());