2009-10-01 65 views
11

Estoy dispuesto a guardar un archivo en la carpeta "Mis documentos" del usuario.Cómo encontrar la carpeta "Mis documentos" en Java

he intentado conseguir la ubicación de esta manera:

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

Entonces, me di cuenta de que esto no funcionaría en un sistema en el que se establece el idioma a otro idioma, por ejemplo francés.

¿Hay alguna otra forma de obtener la carpeta "Mis documentos" de manera eficiente?

Respuesta

14

Si no le importa en función de oscilación que aparentemente puede utilizar este truco:

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()); 
    } 
} 

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

+2

Para Mac OS X, el resultado de utilizar este es un directorio demasiado alto en realidad. – Trejkaz

+0

Esto me remite a una carpeta que no existe ... c: \ Users \ \ Documents. La carpeta de documentos en mi sistema se llama Mis documentos. – JavaLatte

+0

@JavaLatte ¿Estás seguro de que ese es el nombre real? Explorer lo mostrará como "Mis documentos", incluso si el directorio se llama "Documentos", si hace clic en la barra de ruta, puede ver la ruta real. –

0
+0

No funciona para java – abhilash

+1

¿No "% CSIDL_PERSONAL% \ doc.txt" abrirá el archivo doc.txt en la carpeta Mis documentos, incluso en Java? –

+0

Probablemente lo haría, pero su programa ya no sería independiente de la plataforma. Parece mejor usar el truco de Swing FileSystemView como se sugirió anteriormente, ya que funciona multiplataforma y también significa que usted sigue los mismos valores predeterminados que otras aplicaciones Java (siempre es bueno ser consistente). –

5

Hay winfoldersjava JNI extension para acceder a los nombres de carpetas especiales en Java.

La página winfoldersjava también describe el uso de otro método de swing:

Además, si sólo necesita el camino "Mis documentos" y no le importa tocar oscilación puede que no necesite WinFoldersJava. Puede usar javax.swing.filechooser.FileSystemView.getFileSystemView(). GetDefaultDirectory() en su lugar.

0

La ubicación para ese directorio puede ser cambiada por cada usuario, por lo tanto, no solo depende de la configuración regional.
Para encontrar dónde está esa carpeta, debe buscar en el registro. de comandos de Windows para hacerlo es o bien:

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 

no está seguro de qué lugar realidad, pero es uno de ellos.

+0

estas entradas de registro no se crean hasta uno de los otros programas llamados API de Shell –

9

En cuanto al rendimiento, Esto es más rápido que el uso deJFileChooser:

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

En mi PC, JFileChooser aproximación necesarias 300ms, y llamando directamente FileSystemView necesaria menos de 100 ms.

Cuestiones relacionadas