有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java 安卓 getRuntime()。带cat命令的exec()

我正在使用process类运行此命令

/sdcard/file1.mpg /sdcar/file2.mpg > /sdcard/out.mpg

以下是我试图做到这一点的方式:

Process processx = Runtime.getRuntime().exec(new String[] {"cat","/sdcard/file1.mpg /sdcard/file2.mpg > /sdcard/out.mpg" });

BufferedReader in = new BufferedReader(new InputStreamReader(processx.getInputStream()));

String line = null;
while ((line = in.readLine()) != null) {
      System.out.println(line);
}

// Waits for the command to finish.
processx.waitFor();

该命令在终端上运行,但在我尝试上述操作时无法运行,有人知道为什么吗


共 (3) 个答案

  1. # 1 楼答案

    我使用这段小代码执行“cat”命令和大多数shell命令:

    String[] cmdline = { "sh", "-c", "cat /sdcard/file1 >> /sdcard/file2" }; 
    try {
    Runtime.getRuntime().exec(cmdline);
    } catch (Exception s) {
    finishAffinity();
    }
    
  2. # 2 楼答案

    绝对没有理由用“猫”来做这件事。在Android上,这不是一种受支持或鼓励的机制,也没有理由启动一个新的可执行文件来完成java代码中可以轻松完成的任务,即读取一个文件并将其写入另一个文件

    请注意,您正在尝试执行shell重定向,但由于您没有执行shell,因此该重定向将不起作用

  3. # 3 楼答案

    重定向(>)不是操作系统的功能。这是shell的一个特性。要使其在java中工作,必须运行以下操作:

    /bin/sh yourcommand > yourfile

    即,在您的情况下:

    /bin/sh cat /sdcard/file1.mpg /sdcard/file2.mpg > /sdcard/out.mpg

    但是你能解释一下你为什么要这么做吗?您知道这个命令与cp /sdcard/file1.mpg /sdcard/file2.mpg /sdcard/out.mpg完全等价,可以在纯java中编码,而无需运行任何命令行吗?除非你有特殊的理由,否则就去吧!尽可能编写纯java代码。它更易于调试、支持和维护