2 Stimmen

CMD-Datei aus Java kopieren

Ich möchte eine Eingabeaufforderung öffnen und einen Kopierbefehl, einige Schalter, die Quelldatei und das Ziel eingeben. Ich habe den unten stehenden Code ausprobiert, aber es scheint nichts zu passieren. Was sehe ich nicht? Was könnte ich falsch machen?

String line;

line = "cmd COPY /Y C:\srcfolder\112.bin C:\destfolder";

Process p = Runtime.getRuntime().exec(line);

p.waitFor();

10voto

vladr Punkte 63255

Wenn Sie wirklich einen externen Befehl zu verwenden, dann wollen Sie ihn wahrscheinlich ausführen (beachten Sie das /C):

CMD /C COPY /Y C:\srcfolder\112.bin C:\destfolder

Ich empfehle Ihnen, die Array-Version von exec um die Behandlung von Anführungszeichen zu vermeiden (falls Dateien oder Verzeichnisse Leerzeichen - oder doppelte Anführungszeichen - enthalten):

String[] args = { "CMD", "/C", "COPY", "/Y", src_file, dest_folder };
Process p = Runtime.getRuntime().exec(args);
p.waitFor();

Denken Sie daran, dass dies nicht portabel ist (funktioniert nicht unter Unix), wenn Sie also nicht unbedingt COPY dann sollten Sie die Methode verwenden, die mit bstpierre .

2voto

Ben S Punkte 66945

Gibt es einen Grund, warum Sie nicht einfach Kopieren der Datei in Java anstatt einen Systemprozess zu schaffen?

Das Kopieren der Dateien mit Java statt mit einem exec-Aufruf würde Ihren Code portabel halten.

2voto

Peter Richards Punkte 629

Ich schließe mich dem Kommentar von bstpierre an.

In Bezug auf Ihr spezielles Problem glaube ich, dass die cmd-Shell nicht beendet wird, nachdem Sie sie erstellt haben. (edit: und Vlad hat darauf hingewiesen, wie man das korrigieren kann)

Nebenbei bemerkt: Vergessen Sie bei künftigen Befehlen nicht, die Backslashes zu entschlüsseln: line="cmd copy /y c: \\srcfolder\\112.bin c: \\destfolder "

1voto

Cameron Pope Punkte 7190

Versuchen Sie

line = "cmd /C COPY /Y C:\srcfolder\112.bin C:\destfolder";
Process p = Runtime.getRuntime().exec(line);
p.waitFor();

Sie werden jedoch Probleme bekommen, wenn Sie Dateien und Ordner mit Leerzeichen darin haben. Ich habe festgestellt, dass die stabilste Methode zur Ausführung von Befehlen die Verwendung von ProcessBuilder und geben Sie den Befehl mit allen Argumenten als Parameter ein.

1voto

bvdb Punkte 18946

Für diejenigen, die sich auf Apache Commons IO .

Seit Java 7 gibt es auch eine java.nio.Files#copy(Path, Path, CopyOption) Methode, die sehr praktisch ist. Sie können mehr Informationen finden ici .

Seit Java 7 ist die Verwendung von Path Objekten wird auch gegenüber dem bisherigen File Objekte.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X