2009-10-01 15 views
11

Sono disposto a salvare un file nella cartella "Documenti" dell'utente.Come trovare la cartella "Documenti" in Java

ho cercato di ottenere la posizione in questo modo:

System.getenv("USERPROFILE") + "\\My Documents\\" 

Poi, ho capito che questo non avrebbe funzionato in un sistema in cui la lingua è impostata su un'altra lingua, francese per esempio.

C'è un altro modo per ottenere la cartella "Documenti" in modo efficiente?

risposta

14

Se non ti dispiace seconda oscillazione è possibile 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()); 
    } 
} 

(fonte: http://www.rgagnon.com/javadetails/java-0572.html)

+2

Per Mac OS X, il risultato dell'utilizzo di questa directory è una directory troppo in alto. – Trejkaz

+0

Mi fa riferimento a una cartella che non esiste ... c: \ Utenti \ \ Documenti. La cartella documenti sul mio sistema si chiama My Documents. – JavaLatte

+0

@JavaLatte Sei sicuro che sia il nome vero? Explorer lo mostrerà come "Documenti" anche se la directory è denominata "Documenti", se si fa clic sulla barra del percorso è possibile visualizzare il percorso reale. –

0
+0

Non funziona per java – abhilash

+1

Non "% CSIDL_PERSONAL% \ doc.txt" apre il file doc.txt nella cartella Documenti, anche in Java? –

+0

Probabilmente lo farebbe, ma il tuo programma non sarebbe più indipendente dalla piattaforma. Sembra meglio usare il trucco Swing FileSystemView come suggerito sopra, in quanto funziona su più piattaforme e significa anche che segui le stesse impostazioni predefinite delle altre app Java (sempre bello essere coerenti). –

5

C'è winfoldersjava JNI extension per l'accesso ai nomi delle cartelle speciali in Java.

La pagina winfoldersjava descrive anche un altro metodo che utilizza swing:

Inoltre, se è necessario solo il percorso "I miei documenti" e non la mente swing toccare potrebbe non essere necessario WinFoldersJava. È possibile utilizzare javax.swing.filechooser.FileSystemView.getFileSystemView(). GetDefaultDirectory().

0

La posizione per quella directory può essere modificato da ciascun utente, quindi non dipende solo dalle impostazioni locali.
Per trovare dov'è la cartella, è necessario controllare il registro. Il comando di Windows per farlo è uno:

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 che posizione in realtà, ma è uno di loro.

+0

queste voci di registro non vengono create fino a uno degli altri programmi denominati API Shell –

9

quanto riguarda le prestazioni, questo è più veloce rispetto all'utilizzo diJFileChooser:

FileSystemView.getFileSystemView().getDefaultDirectory().getPath() 

Nel mio PC, JFileChooser approccio necessario 300ms, e chiamando direttamente FileSystemView necessario inferiore a 100 ms.

Problemi correlati