Мы работаем с некоторым устаревшим кодом, который обращается к общему диску по букве (например, f: \). Использование нотации UNC не является вариантом. Наше приложение оболочки Java будет работать как служба, и в качестве первого шага я хотел бы явно указать диск в коде. Кто-нибудь сделал это?
Как смонтировать Windows-диск на Java?
Ответ 1
Рассмотрите возможность выполнения команды DOS, которая отображает сетевой диск, как в следующем коде:
String command = "c:\\windows\\system32\\net.exe use f: \\\\machine\\share /user:user password";
Process p = Runtime.getRuntime().exec(command);
...
Подробнее о команде 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}]
Ответ 2
Вы можете использовать JCIFS
http://jcifs.samba.org/src/docs/api/jcifs/smb/SmbFile.html
или если вы хотите API более высокого уровня и поддерживаете другие протоколы, такие как FTP, Zip и другие:
http://commons.apache.org/vfs/filesystems.html
Оба варианта - это чистая Java и кросс-платформа.
Ответ 3
Я думаю, что самый простой способ - использовать метод 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) {
}