Méthode appropriée pour trouver le dossier Mes documents de l'utilisateur sur Windows avec Java?

Pour quelque raison que ce soit, j'ai parfois besoin de trouver de l'utilisateur actuel du dossier Mes Documents sous Windows dans un programme Java pour lire certains fichiers. Mais autant que je sache, il n'est aucun moyen de le faire qui n'est pas très imparfait.

La première mauvaise façon: Système.getProperty("user.accueil");
Pourquoi il ne fonctionne pas:

  • Elle renvoie uniquement l' \nom d'utilisateur\ dossier; j'avais besoin d'ajouter "\Documents\" à la fin pour obtenir le dossier de Documents... et qui fonctionne uniquement en anglais.
  • Soleil bugs 6519127 et 4787931. Java trouve le dossier accueil de l'utilisateur sur Windows par la lecture d'une clé de registre obsolètes* pour trouver le Bureau puis de prendre le parent; cette méthode a plusieurs problèmes connus, facilement provoquer un très mauvais dossier doit être retourné. Les bugs sont de 3,75 ans et 8 ans n'ayant pas corrigé.

La deuxième mauvaise façon: à l'Aide d'un registre de lecture de programme pour obtenir le dossier Personnel de l'utilisateur, qui est Mes Documents (mais i18n avais).
Pourquoi il ne fonctionne pas:
Alors qu'il résout les anglais uniquement problème, il est toujours à l'aide de la même déconseillé de registre de domaine, de sorte que les bugs continuent de s'appliquer à elle.

La clé de registre obsolètes dit d'utiliser un appel des indigènes (SHGetKnownFolderPath) qui évidemment je ne peux pas faire de Java.

La troisième mauvaise façon:

JFileChooser fr = new JFileChooser();  
FileSystemView fw = fr.getFileSystemView();  
File documents = fw.getDefaultDirectory();

Pourquoi il ne fonctionne pas: Il fonctionne très bien!
Sauf quand ça ne marche pas. Alors que j'avais un programme qui permet cette ouverture et en cours d'exécution en arrière-plan, j'ai ouvert un DirectX jeu (Fallout: New Vegas). Le programme Java immédiatement résilié avec aucune trace de la pile. Toujours reproductible (pour moi sur ce jeu, et qui sait quoi d'autre). Ne pouvais pas trouver un Soleil bug#.

Si il ya une méthode pour trouver un dossier Documents de l'utilisateur, sur Windows, à partir de Java, qui n'a pas connu de problèmes?

(C'est une belle grosse question.)

*(La clé est "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders")

source d'informationauteur Aleksei Vasiliev