Wir arbeiten mit Legacy-Code, der auf einen freigegebenen Laufwerk durch den Buchstaben (f: \ zum Beispiel) zugreift. Die Verwendung der UNC-Notation ist keine Option. Unsere Java-Wrapper-App wird als Dienst ausgeführt, und im ersten Schritt möchte ich das Laufwerk explizit im Code zuordnen. Hat jemand das getan?Wie kann ich ein Windows-Laufwerk in Java mounten?
Antwort
Betrachten Sie den DOS-Befehl ausführt, der ein Netzwerklaufwerk, wie im folgenden Code abbildet:
String command = "c:\\windows\\system32\\net.exe use f: \\\\machine\\share /user:user password";
Process p = Runtime.getRuntime().exec(command);
...
Siehe Details auf 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:[[email protected] domain name] [/SMARTCARD] [/SAVECRED] [[/DELETE] | [/PERSISTENT:{YES | NO}]] NET USE {devicename | *} [password | *] /HOME NET USE [/PERSISTENT:{YES | NO}]
Was passiert, wenn der Benutzer f bereits zugeordnet hat? Was passiert, wenn wir das gleiche Programm ein paar Mal ausführen und es in der Mitte beenden (z. B. während der Debugsitzung)? – ddimitrov
Wenn der Benutzer Laufwerk F bereits zugeordnet hat: Sie erhalten den "Systemfehler 85 ist aufgetreten." in der Prozessausgabe. Sie können einfach danach suchen. –
Ich denke, der einfachste Weg ist, die Runtime.getRuntime(). Exec() -Methode 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) {
}
Die direkte Verwendung von net.exe behandelt keine Fehlerfälle und ist nicht plattformneutral. – munsingh
Sie können JCIFS
verwendenhttp://jcifs.samba.org/src/docs/api/jcifs/smb/SmbFile.html
oder wenn Sie höhere Level-API wollen und Unterstützung für andere Protokolle wie FTP, ZIP und andere:
http://commons.apache.org/vfs/filesystems.html
Beide Optionen sind reine Java und Cross-Plattform.
Wenn dies für "Benutzer" gilt, sollten Sie einen Buchstaben gegen Ende des Alphabets auswählen, der nicht durch ein oder zwei angeschlossene USB-Geräte nicht verfügbar gemacht wird. – Cheekysoft
Das ist ein guter Rat. USB-Geräte nehmen die erste zur Verfügung. In unserem Fall liegt der Brief der Wahl außerhalb unserer Kontrolle. Wir müssen es nur kartieren. –