Как я могу смонтировать диск 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) {
    }
Другие вопросы по тегам