J'ai besoin de trouver le chemin de mes documents en utilisant Java. Le code suivant ne me donne pas une loation "précise"
System.getProperty("user.home");
Quel devrait être l'inverse?
P.S: Je ne veux pas utiliser le truc sale de JFileChooser.
Vous pouvez l'obtenir en utilisant une requête de registre, vous n'avez pas besoin de droits JNA ou d'administrateur pour cela.
Runtime.getRuntime().exec("reg query \"HKCU\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Shell
Folders\" /v personal");
Évidemment, cela échouera sur autre chose que Windows, et je ne suis pas certain que cela fonctionne pour Windows XP.
EDIT: Mettez ceci dans une séquence de code:
String myDocuments = null;
try {
Process p = Runtime.getRuntime().exec("reg query \"HKCU\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Shell Folders\" /v personal");
p.waitFor();
InputStream in = p.getInputStream();
byte[] b = new byte[in.available()];
in.read(b);
in.close();
myDocuments = new String(b);
myDocuments = myDocuments.split("\\s\\s+")[4];
} catch(Throwable t) {
t.printStackTrace();
}
System.out.println(myDocuments);
Notez que cela verrouille le processus jusqu'à ce que la "requête de registre" soit terminée, ce qui pourrait causer des problèmes en fonction de ce que vous faites.
C'est facile, JFileChooser
le trouve pour vous
new JFileChooser().getFileSystemView().getDefaultDirectory().toString();
J'espère que ça aidera quelqu'un
Puisque la réponse la plus votée de @xchiltonx utilise JFileChooser
, j'aimerais ajouter que, en ce qui concerne les performances, ceci est plus rapide que d'utiliser JFileChooser
:
FileSystemView.getFileSystemView().getDefaultDirectory().getPath()
Dans mon PC, JFileChooser
aproach avait besoin de 300 ms et appeler FileSystemView
avait directement besoin de moins de 100 ms.
Note: La question est un doublon possible de Comment trouver le dossier «Mes documents» en Java
En utilisant la JNA, vous feriez ceci:
String myDocsPath = Shell32Util.getFolderPath(ShlObj.CSIDL_PERSONAL);
La JNA extrait une DLL à la volée, puis utilise JNI avec cette DLL pour effectuer des appels API Windows. Il cache cependant tous les détails JNI. Utiliser JNA est aussi simple que d’utiliser un autre JAR de bibliothèque Java.
"user.home"
renvoie le répertoire de base de l'utilisateur, et non le dossier "Mes documents" . Sous Windows, il s'agirait de "C:\Utilisateurs\Nom d'utilisateur \" pour Vista ou 7, ou "C:\Documents and Settings\Nom d'utilisateur "pour XP
Ce que tu veux c'est:
System.out.println(System.getProperty("user.home") + File.separatorChar + "My Documents");
Le meilleur moyen que j'ai trouvé est d'utiliser les AWT:
ShellFolder.get("fileChooserDefaultFolder");
J'ai redirigé mon dossier Documents vers le lecteur D: et ce répertoire a été extrait avec succès. Cela prend également environ 40 ms (sur ma machine). Utiliser FileSystemView
prend environ 48 ms et new JFileChooser()
environ 250 ms.
Ces trois méthodes utilisent en réalité ShellFolder
sous le capot, et la différence avec FileSystemView
est négligeable, mais l’appeler directement évite les frais généraux des deux autres.
Remarque: Vous pouvez également convertir ceci directement en File
au lieu d’obtenir implicitement la méthode toString()
, ce qui peut vous aider davantage:
File documents = (File) ShellFolder.get("fileChooserDefaultFolder");
c’est ce que fait Eclipse pour obtenir le dossier du document utilisateur.
System.getProperty("user.dir") //$NON-NLS-1$
+ File.separator + "workspace")
J'espère que c'est utile!