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.
- 1. Wie ein Skript auf Gerät mounten in OSX
- 2. Mounten Sie ein Remote-Dateisystem mit SSHFS
- 3. Kann ich einen anderen Routen-Handler über __meteor_bootstrap__.app mounten?
- 4. Mounten rootfs auf Loopback
- 5. Wie kann ich ein BufferedImage in Java richtig laden?
- 6. Wie kann ich ein Feld in Java serialisierbar machen?
- 7. Wie kann ich ein GEOTIFF in Java schreiben?
- 8. Wie kann ich ein "Player Image" in Java hinzufügen?
- 9. Wie kann ich ein JSONArray in JAVA sortieren
- 10. Wie kann ich ein .torrent in Java generieren?
- 11. Wie kann ich ein Byte-Array in Java anheften?
- 12. Wie kann ich ein Volume in Java auswerfen?
- 13. Wie kann ich ein Python-Skript in Java beenden?
- 14. Docker in Docker kann das Volume nicht mounten
- 15. Wie durchlaufe ich ein Array in Java?
- 16. Mounten Sie webdav/davfs in RedHat OpenShift
- 17. Wie kann ich in Java tweenen?
- 18. Wie kann ich lua in Java einbetten?
- 19. Wie kann ich einem vorhandenen Docker-Container ein Volume hinzufügen?
- 20. Fehler beim Mounten des Laufwerks
- 21. Wie kann ich Bilder in Java überlagern?
- 22. Wie drehe ich ein Bild in JAVA?
- 23. Wie setze ich ein Hintergrundbild in Java?
- 24. Wie erhalte ich ein Dateisymbol in Java?
- 25. Mounten Sie meinen Speicherkontodateidienst in einer Webanwendung
- 26. mounten webdav Freigaben mit davfs2
- 27. Wie kann ich ein Lua-Skript von Java
- 28. Wie kann ich Java umwandeln
- 29. Wie kann ich ein Online-Formular mit Java ausfüllen?
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. –