当我使用Runtime.getRuntime()。exec来合并mp3时,copy无法工作

时间:2018-05-10 05:21:28

标签: java cmd merge runtime exec

我有两个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";

我尝试使用start命令,如下所示:

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

它将打开一个窗口来运行此命令并且它可以正常工作,但窗口无法自动关闭。

我认为它应该是' +'干扰命令,但我不知道如何解决它,我使用谷歌和bing和百度,使用大约一天,也失败。

方便的时候,请你帮忙吗?任何帮助或建议将非常感激。提前谢谢。

1 个答案:

答案 0 :(得分:0)

当我睡觉时,我找到了答案......我颠倒了这样的代码:

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

现在正在工作......