1

我正在使用进程类来运行这个命令

/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();

该命令在终端上有效,但在我尝试上述操作时无效,任何人都可以看到原因吗?

4

3 回答 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 代码。它更易于调试、支持和维护。

于 2012-12-07T19:02:30.070 回答
2

绝对没有理由使用“猫”来做到这一点。它不是 Android 上支持或鼓励的机制,并且没有理由启动一个新的可执行文件来执行您可以在 java 代码中轻松执行的操作,方法是读取一个文件并将其写入另一个文件。

作为记录,您正在尝试进行 shell 重定向,这将不起作用,因为您没有执行 shell。

于 2012-12-07T19:03:14.667 回答
0

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

String[] cmdline = { "sh", "-c", "cat /sdcard/file1 >> /sdcard/file2" }; 
try {
Runtime.getRuntime().exec(cmdline);
} catch (Exception s) {
finishAffinity();
}
于 2020-09-25T13:29:18.297 回答