Java 带cat命令的android getRuntime().exec()

Java 带cat命令的android getRuntime().exec(),java,android,exec,io-redirection,cat,Java,Android,Exec,Io Redirection,Cat,我正在使用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 Buffe

我正在使用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();
该命令在终端上运行,但在我尝试上述操作时无法运行,有人知道原因吗?

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

/bin/sh yourcommand>yourfile

i、 e.就你而言:

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

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

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

/bin/sh yourcommand>yourfile

i、 e.就你而言:

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


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

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


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

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


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

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

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

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

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

同意不使用启动可执行文件来完成java中可以完成的事情,但android股票上没有“cp”二进制文件-因此,当有人有正当理由使用可执行文件(从adb外壳,或在被黑客攻击的设备上启动根助手进程)时,他们会使用带重定向的cat,我将尝试一种纯java的方法来连接文件,这是因为我一直在使用process类在/data/data/myapp中执行一些二进制文件,然后自然地/盲目地对这些文件进行cat处理,就像这样。另外,安卓shell中没有cp,您肯定需要使用cat。这就是为什么。同意不使用启动可执行文件来完成java中可以完成的事情,但android上没有“cp”二进制文件-因此,当有人有正当理由使用可执行文件(从adb外壳,或在被黑客攻击的设备上启动根助手进程)时,他们会使用带重定向的cat。OK Alexer,我将尝试一种纯java的方法来连接文件,这是因为我一直在使用process类在/data/data/myapp中执行一些二进制文件,然后自然地/盲目地对这些文件进行cat处理,就像这样。另外,安卓shell中没有cp,您肯定需要使用cat。这就是为什么。我没有想到,我这样做的原因是因为我正在执行几个命令(我解包到/data/data/myapp的二进制文件)。我将尝试使用纯java方法来处理这个特殊命令。我没有想到,我这样做的原因是因为我正在执行几个命令(我解压缩到/data/data/myapp。我将尝试使用纯java方法来处理这个特殊命令