¿Cómo puedo montar una unidad de Windows en Java?
-
03-07-2019 - |
Pregunta
Estamos trabajando con un código heredado que accede a un disco compartido por la letra (por ejemplo, f: \). Usar la notación UNC no es una opción. Nuestra aplicación de envoltura Java se ejecutará como un servicio y, como primer paso, me gustaría asignar el disco explícitamente en el código. ¿Alguien ha hecho esto?
Solución
Considere ejecutar el comando DOS que asigna una unidad de red como en el siguiente código:
String command = "c:\\windows\\system32\\net.exe use f: \\\\machine\\share /user:user password";
Process p = Runtime.getRuntime().exec(command);
...
Ver detalles sobre el comando de uso de red:
The syntax of this command is: NET USE [devicename | *] [\\computername\sharename[\volume] [password | *]] [/USER:[domainname\]username] [/USER:[dotted domain name\]username] [/USER:[username@dotted domain name] [/SMARTCARD] [/SAVECRED] [[/DELETE] | [/PERSISTENT:{YES | NO}]] NET USE {devicename | *} [password | *] /HOME NET USE [/PERSISTENT:{YES | NO}]
Otros consejos
Puedes usar JCIFS
http://jcifs.samba.org/src/ docs / api / jcifs / smb / SmbFile.html
o si desea una API de nivel superior y soporte para otros protocolos como FTP, Zip y otros:
http://commons.apache.org/vfs/filesystems.html
Ambas opciones son Java puro y multiplataforma.
Creo que la forma más fácil es usar el método Runtime.getRuntime (). exec () y llamar al " uso neto " comando.
Por ejemplo:
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) {
}