Копирование не может работать, когда я использую Runtime.getRuntime (). exec для слияния mp3 - PullRequest
0 голосов
/ 10 мая 2018

У меня есть два файла mp3, и я хочу объединить их, я использую cmd следующим образом:

C:\Users\57477\Desktop>copy /b /y 1.mp3+2.mp3 3.mp3

Это эффективно, но когда я использую в Java, это не может работать

String[] cmd = { "cmd.exe", "/c", "C:", "&&", "cd", "C:\\Users\\57477\\Desktop", "&&", "copy", "/b", "/y","1.mp3+2.mp3", "3.mp3" };
    // this cmd also can't work
    String cmd2 = "cmd.exe /c C: && cd C:\\Users\\57477\\Desktop && copy /b 1.mp3+2.mp3 3.mp3";
    Runtime run = null;
    try {
        run = Runtime.getRuntime();
        long start = System.currentTimeMillis();
        Process p = run.exec(cmd);
        // 释放进程
        p.getOutputStream().close();
        p.getInputStream().close();
        p.getErrorStream().close();
        p.waitFor();
        long end = System.currentTimeMillis();
        System.out.println(" convert success, costs:" + (end - start) + "ms");
    } catch (Exception e) {
        e.printStackTrace();
    } finally {
        run.freeMemory();
    }

Если я просто скопирую один файл, он может работать так:

String[] cmd = { "cmd.exe", "/c", "C:", "&&", "cd", "C:\\Users\\57477\\Desktop", "&&", "copy", "/b", "/y","1.mp3", "3.mp3" };
    // this cmd is effective
String cmd2 = "cmd.exe /c C: && cd C:\\Users\\57477\\Desktop && copy /b 1.mp3 3.mp3";
String cmd3 = "cmd.exe /c copy /b /y C:\\Users\\57477\\Desktop\\1.mp3 C:\\Users\\57477\\Desktop\\3.mp3";

Я пытаюсь использовать команду запуска, например:

cmd /c start copy /b /y C:\\Users\\57477\\Desktop\\1.mp3+C:\\Users\\57477\\Desktop\\2.mp3 C:\\Users\\57477\\Desktop\\3.mp3

Откроется окно для запуска этой команды, и она работает, но окно не может автоматически закрыться.

Я думаю, что '+' мешает команде, но я не знаю, как это исправить, я использую Google, Bing и Baidu, использую около одного дня, также не удается.

Для вашего удобства, не могли бы вы мне помочь? Любая помощь или предложение будут по достоинству оценены. Заранее спасибо.

1 Ответ

0 голосов
/ 10 мая 2018

Когда я спал, я нашел ответ ... я перевернул код так:

p.waitFor();
p.getOutputStream().close();
p.getInputStream().close();
p.getErrorStream().close();

Теперь это работа ......

...