Как я могу смонтировать диск Windows в Java?
Мы работаем с устаревшим кодом, который обращается к общему диску по буквам (например, f:\). Использование обозначения UNC не вариант. Наше приложение-оболочка Java будет работать как служба, и в качестве первого шага я бы хотел явно отобразить диск в коде. Кто-нибудь делал это?
3 ответа
Попробуйте выполнить команду DOS, которая отображает сетевой диск, как показано в следующем коде:
String command = "c:\\windows\\system32\\net.exe use f: \\\\machine\\share /user:user password";
Process p = Runtime.getRuntime().exec(command);
...
Смотрите подробности о команде net use:
Синтаксис этой команды: Чистое использование [имя-устройства | *] [\\ имя_компьютера \ имя_ресурса [\volume] [пароль | *]] [/USER:[имя_домена \] имя пользователя] [/ USER: [пунктирное доменное имя \] имя пользователя] [/ USER: [имя пользователя @ точечное имя домена] [/ИНТЕЛЛЕКТУАЛЬНАЯ КАРТОЧКА] [/SAVECRED] [[/DELETE] | [/PERSISTENT:{ДА | НЕТ}]] NET USE {devicename | *} [пароль | *] /ГЛАВНАЯ ЧИСТОЕ ИСПОЛЬЗОВАНИЕ [/PERSISTENT:{YES | НЕТ}]
Вы можете использовать JCIFS
http://jcifs.samba.org/src/docs/api/jcifs/smb/SmbFile.html
или если вы хотите более высокий уровень API и поддержку других протоколов, таких как FTP, Zip и другие:
http://commons.apache.org/vfs/filesystems.html
Оба варианта являются чисто Java и кроссплатформенными.
Я думаю, что самый простой способ - использовать метод Runtime.getRuntime(). Exec() и вызвать команду "net use".
Например:
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) {
}