如何在Java中执行命令行的.exe文件

19
  1. 我想使用Java程序将AVI文件转换为3GP。
  2. 为此,我正在使用“E.M. Total Video Converter Command Line 2.43”,其命令为:
    "C:\E.M. TVCC>TVCC -f E:\TestVideo\01.avi -o E:\OutputFiles\target.3gp"
  3. 我在http://www.rgagnon.com/javadetails/java-0014.html网站上找到了一个执行命令行可执行文件的程序,代码如下:

路径包含空格的可执行文件

如果路径中包含空格,在Windows平台上,您需要用引号将路径括起来以便正确执行程序。

public class Test {
  public static void main(String[] args) throws Exception {
    Process p = Runtime.getRuntime().exec(
       "\"c:/program files/windows/notepad.exe\"");
    p.waitFor();
  }
}

如果需要传递参数,使用字符串数组会更安全,特别是当参数中包含空格时。

String[] cmd = { "myProgram.exe", "-o=This is an option" };
Runtime.getRuntime().exec(cmd);
如果使用 "start" 命令并且要启动的文件路径中包含空格,则必须在"start"命令中指定一个标题。
String fileName = "c:\\Applications\\My Documents\\test.doc";
String[] commands = {"cmd", "/c", "start", "\"DummyTitle\"",fileName};
Runtime.getRuntime().exec(commands);

有人能帮助我将上述命令放入这段代码中吗?我不知道在上面的代码中放置该命令的语法规则。请帮帮我。

这就是我使用的确切Java代码:

public class Test {
    public static void main(String[] args) throws Exception {

        String[] cmd = { "C:\\Program Files\\E.M. TVCC\\TVCC.exe", "-f C:\\Program Files\\E.M. TVCC\\01.avi", "-o C:\\Program Files\\E.M. TVCC\\target.3gp" };
        Process p = Runtime.getRuntime().exec(cmd);
        p.waitFor();
    }
}

它已经是Java代码了 - 你需要什么帮助? - nos
谢谢您的回复。我想把这个"C:\E.M. TVCC>TVCC -f E:\TestVideo\01.avi -o E:\OutputFiles\target.3gp"放到上面的Java代码中。应该在哪里以及如何放置它? - Ishan
2个回答

24

你在问题中已经有了所有的要素,只需要将它们组合起来就行了。

以下代码应该可以解决问题:

public class Test {
    public static void main(String[] args) throws Exception {

        String[] cmd = { "C:\\E.M. TVCC\\TVCC.exe", "-f E:\\TestVideo\\01.avi", "-o E:\\OutputFiles\\target.3gp" };
        Process p = Runtime.getRuntime().exec(cmd);
        p.waitFor();
    }
}

话虽如此,硬编码路径并不是一个好主意,你应该从其他地方读取它们:比如作为程序的参数、属性文件等。


谢谢您的回复。我尝试了您建议的方法,但它并没有起作用。这里是否有语法问题?因为命令中有空格,您是如何处理这些空格的呢? - Ishan
2
@user243680,如果它不能正常工作,你需要告诉我们它是如何不能正常工作的。你遇到了什么错误?它是否编译成功?它是否能够正常运行?在运行时是否出现任何错误?你应该编辑你的原始问题并将所有这些信息添加到其中。 - Glen
非常抱歉,先生。它可以编译和运行,但没有生成任何.3gp文件。您有什么想法为什么会这样吗? - Ishan
@user243680 尝试转义 \ 字符。(将每个 \ 替换为 \\)我已更新我的答案以显示此内容。 - Glen
@user243680,我在上面发布的代码可以正常工作。问题可能出在你的TVCC可执行文件上。尝试手动运行它并查看发生了什么。此外,请编辑您的答案并复制/粘贴您正在运行的确切Java代码。 - Glen
谢谢您先生。当手动运行时,TVCC正常工作。我已经编辑了我的问题并发布了我正在使用的确切代码。 - Ishan

3

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接