2009-10-01 7 views
11

Je suis prêt à enregistrer un fichier dans le dossier "Mes documents" de l'utilisateur.Comment trouver le dossier "Mes documents" en Java

J'ai essayé d'obtenir l'emplacement comme ceci:

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

Puis, je me suis rendu cela ne fonctionnerait pas dans un système où la langue est définie dans une autre langue, français par exemple.

Existe-t-il un autre moyen d'obtenir le dossier "Mes documents" efficacement?

Répondre

14

Si vous ne me dérange pas selon le swing, vous pouvez apparemment utiliser cette astuce:

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

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

+2

Pour Mac OS X, le résultat de l'utilisation de ce répertoire est trop élevé. – Trejkaz

+0

Cela me renvoie à un dossier qui n'existe pas ... c: \ Users \ \ Documents. Le dossier de documents sur mon système s'appelle Mes documents. – JavaLatte

+0

@JavaLatte Etes-vous sûr que c'est le nom réel? L'explorateur l'affichera comme "Mes documents" même si le répertoire est nommé "Documents", si vous cliquez sur la barre de chemin, vous pouvez voir le chemin réel. –

0
+0

Ne fonctionne pas pour Java – abhilash

+1

"% CSIDL_PERSONAL% \ doc.txt" n'ouvrirait-il pas le fichier doc.txt dans le dossier Mes documents, même en Java? –

+0

Probablement, mais votre programme ne serait plus indépendant de la plateforme. Il semble préférable d'utiliser le truc Swing FileSystemView comme suggéré ci-dessus, car cela fonctionne multi-plateforme et signifie également que vous suivez les mêmes valeurs par défaut que les autres applications Java (toujours agréable d'être cohérent). –

5

Il y a winfoldersjava JNI extension pour accéder à des noms de dossiers spéciaux en Java.

La page winfoldersjava décrit également une autre méthode utilisant Swing:

En outre, si vous avez besoin seulement « Mes documents » chemin et ne vous dérange pas toucher SWING vous ne pouvez pas besoin WinFoldersJava. Vous pouvez utiliser javax.swing.filechooser.FileSystemView.getFileSystemView(). GetDefaultDirectory() à la place.

0

L'emplacement de ce répertoire peut être modifié par chaque utilisateur, donc ce n'est pas seulement dépendant des paramètres régionaux.
Pour trouver où ce dossier est, vous devez regarder dans le registre. La commande Windows pour le faire est soit:

reg query "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\User 
Shell Folders" /v personal 

ou

reg query "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell 
Folders" /v personal 

pas sûr emplacement en fait, mais il est l'un d'entre eux.

+0

ces entrées de Registre ne sont pas créées jusqu'à ce que l'un des autres programmes appelés Shell API –

9

En ce qui concerne la performance, ce est plus rapide que l'utilisationJFileChooser:

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

Dans mon approche PC, JFileChooser nécessaire 300ms et appeler directement FileSystemView besoin de moins de 100ms.

Questions connexes