Wir arbeiten mit einem älteren Code, der auf ein freigegebenes Laufwerk über den Buchstaben (z. B. f:\) zugreift. Die Verwendung der UNC-Notation ist keine Option. Unsere Java-Wrapper-Anwendung wird als Dienst ausgeführt, und als ersten Schritt würde ich das Laufwerk gerne explizit im Code zuordnen. Hat das schon jemand gemacht?
Antworten
Zu viele Anzeigen?Führen Sie den DOS-Befehl aus, der ein Netzlaufwerk zuordnet, wie im folgenden Code beschrieben:
String command = "c:\\windows\\system32\\net.exe use f: \\\\machine\\share /user:user password";
Process p = Runtime.getRuntime().exec(command);
...
Siehe Einzelheiten zum Befehl net use:
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}\]
Sie können JCIFS verwenden
http://jcifs.samba.org/src/docs/api/jcifs/smb/SmbFile.html
oder wenn Sie eine höherwertige API und Unterstützung für andere Protokolle wie FTP, Zip und andere wünschen:
http://commons.apache.org/vfs/filesystems.html
Beide Optionen sind reines Java und plattformübergreifend.
Ich denke, der einfachste Weg ist, die Methode Runtime.getRuntime().exec() zu verwenden und den Befehl "net use" aufzurufen.
Zum Beispiel:
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) {
}