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.

Author: Em Ae, 2012-03-13

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.

 9
Author: pdinklag, 2012-03-13 03:00:01

È facile, JFileChooser lo trova per te

new JFileChooser().getFileSystemView().getDefaultDirectory().toString();

Spero che questo aiuti qualcuno

 25
Author: xchiltonx, 2018-04-05 16:01:09

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

 15
Author: IvanRF, 2017-05-23 12:26:12

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.

 2
Author: Sarel Botha, 2013-10-30 18:53:46

"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");
 1
Author: nbarraille, 2012-03-13 02:46:21

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!

 0
Author: TuanAnh207, 2013-09-14 04:16:38
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());
 -3
Author: Jose Balicag, 2017-10-26 17:01:05