2008-10-16 5 views
11

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?

+0

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

+0

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. –

Antwort

15

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}] 
+0

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

+0

Wenn der Benutzer Laufwerk F bereits zugeordnet hat: Sie erhalten den "Systemfehler 85 ist aufgetreten." in der Prozessausgabe. Sie können einfach danach suchen. –

4

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) { 
    } 
+0

Die direkte Verwendung von net.exe behandelt keine Fehlerfälle und ist nicht plattformneutral. – munsingh