Копия файла CMD из Java - PullRequest
       12

Копия файла CMD из Java

1 голос
/ 26 февраля 2009

Я хочу открыть командную строку и передать команду копирования, некоторые параметры и исходный файл плюс место назначения. Я попробовал код ниже, но ничего не происходит. Что я не вижу? Что я могу делать не так?

String line;

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

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

p.waitFor();

Ответы [ 7 ]

8 голосов
/ 26 февраля 2009

Если у вас действительно есть для использования внешней команды, то вы, вероятно, захотите выполнить (обратите внимание на / C):

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

Я рекомендую вам использовать версию массива exec, чтобы избежать обработки кавычек (если какие-либо файлы или каталоги содержат пробелы - или двойные кавычки - в них):

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

Помните, что это не переносимо (не будет работать в Unix), поэтому, если вам действительно не нужно использовать COPY, вам следует использовать метод, связанный с bstpierre.

2 голосов
/ 26 февраля 2009

Я второй комментарий bstpierre.

Что касается вашей конкретной проблемы, я считаю, что оболочка cmd не завершается после ее создания. (редактировать: и Влад указал, как это исправить)

В качестве отступления от других команд в будущем не забудьте избежать обратной косой черты: line = "cmd copy / y c: \\ srcfolder \\ 112.bin c: \\ destfolder"

2 голосов
/ 26 февраля 2009

Есть ли причина, по которой вы не просто копируете файл на Java , а не создаете системный процесс?

Копирование файлов с использованием Java вместо вызова exec сделает ваш код переносимым.

1 голос
/ 17 января 2016

Для тех, кто ссылается на Apache Commons IO .

Так как в Java 7 есть также метод java.nio.Files#copy(Path, Path, CopyOption), который очень удобен. Вы можете найти больше информации здесь .

Начиная с Java 7, использование Path объектов также предпочтительнее предыдущих File объектов.

1 голос
/ 26 февраля 2009

попробуй

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

Однако вы столкнетесь с проблемами, если у вас есть файлы и папки с пробелами в них. Я обнаружил, что самый надежный способ выполнения команд - использовать ProcessBuilder и передавать команду со всеми аргументами в качестве параметров.

0 голосов
/ 26 февраля 2009

Ах, похоже, кто-то упомянул об этом, но я уточню (эпически, потому что тот, кто упомянул об этом, забыл процитировать свой обратный слеш в посте, делая его похожим на один!).

Таким образом, перечисленные решения лучше, но я вполне уверен, что причина, по которой вы терпите неудачу, заключается в том, что в Java вы никогда не можете использовать обратную косую черту в качестве одиночного символа, это символ кавычки, поэтому вам всегда нужно \\ внутри строки , И для 2-х обратных косых черт подряд, я думаю, вам нужно 6 или 8 из них !!?! ?? посмотрите.

Исправлен парень, который разместил его передо мной и дал ему + 1

0 голосов
/ 26 февраля 2009

Используйте для использования версии Windows.

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

Альтернатива: Apache Commons IO предоставляет хороший набор библиотек для обработки файлов на чистой Java. В частности, посмотрите на FileUtils.copyFileToDirectory (файл srcFile, файл destDir)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...