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
Vous devez vous connecter pour publier un commentaire.
Il n'y a pas de pur java façon de le faire, mais vous pouvez utiliser la JNA wrapper plus de la JNI de le faire sans avoir à écrire du code natif vous-même. Il y a un bon exemple de comment obtenir le dossier de Documents dans Windows à mi-chemin vers le bas les réponses à:
Quelle est la meilleure façon de trouver le répertoire de base d'utilisateurs en Java?
Une perte de temps, mais de manière fiable de trouver les "Documents" dossier d'un utilisateur windows: Faites de votre application java exécuter une chauve-souris de script qui utilise Reg.exe (un fichier système de windows) pour trouver la valeur de la clé de registre qui est le chemin. Ensuite, l'utilisation d'un pipeline dans le même fichier bat pour envoyer des données à l' 'findstr" qui invite de commande windows. Utiliser un autre pipeline à la sortie de la valeur renvoyée vers un fichier texte. Ensuite, il suffit de faire votre application java lire ce fichier texte, et de le supprimer une fois que c'est fait 🙂 suffisamment bien Fonctionné pour moi.
Code pour le fichier bat:
Il y a une coutume de l'API Java que quelqu'un a construit (leur site internet ne fonctionne plus), mais le code reste sur Google Code:
http://winfoldersjava.googlecode.com/files/WinFoldersJava_1.1.zip
Il y a deux DLL qui doivent être référencés, un pour chaque architecture(x86 et x64).
de l'utilisateur.la maison n'est pas "mes documents", mais les utilisateurs à domicile dossier, comme sur Unix ~/.
Pour arriver à "Mes documents", vous pouvez utiliser le Système.getProperty("user.home")+"\Documents", indépendamment du système de la langue. L'essayer.