2008-10-16 6 views
11

Nous travaillons avec du code hérité qui accède à un lecteur partagé par la lettre (f: \ par exemple). L'utilisation de la notation UNC n'est pas une option. Notre application Java wrapper fonctionnera comme un service, et comme première étape, je voudrais mapper le lecteur explicitement dans le code. Est-ce que quelqu'un a fait ça?Comment puis-je monter un lecteur Windows en Java?

+0

S'il s'agit d'un 'utilisateur', pensez à choisir une lettre vers la fin de l'alphabet qui ne sera pas indisponible si un ou deux périphériques USB sont branchés. – Cheekysoft

+0

C'est un bon conseil. Les périphériques USB prennent le premier disponible. Dans notre cas, la lettre de choix est hors de notre contrôle. Nous avons juste besoin de le faire cartographier. –

Répondre

15

Pensez à exécuter la commande DOS qui mappe un lecteur réseau comme dans le code suivant:

String command = "c:\\windows\\system32\\net.exe use f: \\\\machine\\share /user:user password"; 
Process p = Runtime.getRuntime().exec(command); 
... 

Voir les détails sur commande net use:

 
The syntax of this command is: 


NET USE 
[devicename | *] [\\computername\sharename[\volume] [password | *]] 
     [/USER:[domainname\]username] 
     [/USER:[dotted domain name\]username] 
     [/USER:[[email protected] domain name] 
     [/SMARTCARD] 
     [/SAVECRED] 
     [[/DELETE] | [/PERSISTENT:{YES | NO}]] 

NET USE {devicename | *} [password | *] /HOME 

NET USE [/PERSISTENT:{YES | NO}] 
+0

Que se passe-t-il si l'utilisateur a déjà mappé f:? Que se passe-t-il si nous exécutons le même programme plusieurs fois et que nous le détruisons au milieu (par exemple pendant la session de débogage)? – ddimitrov

+0

Si l'utilisateur a déjà mappé le lecteur f: vous obtiendrez le message "L'erreur système 85 s'est produite". dans la sortie du processus. Vous pouvez simplement scanner pour cela. –

4

Je pense que le moyen le plus simple est d'utiliser la méthode Runtime.getRuntime(). Exec() et d'appeler la commande "net use".

Par exemple:

try { 
     // Execute a command without arguments 
     String command = "C:\\Windows\\system32\\net.exe use F: \\\\server\\share /user:user password"; 
     Process child = Runtime.getRuntime().exec(command); 
    } catch (IOException e) { 
    } 
+0

L'utilisation directe de net.exe ne gère pas les cas d'erreur et n'est pas neutre pour la plate-forme. – munsingh

Questions connexes