用cat命令安装android getRuntime()。exec()

时间:2012-12-07 18:53:11

标签: java android exec io-redirection cat

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

/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 个答案:

答案 0 :(得分: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代码。它更容易调试,支持和维护。

答案 1 :(得分:2)

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

对于记录,您正在尝试进行shell重定向,但由于您没有执行shell,因此无效。

答案 2 :(得分:0)

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

 if (channel.name.startsWith('?')) return message.reply(Embed5); console.log('All this works')

// STOPS PRINTING //
await message.mentions.channel.first.setName(`?${channel.name}`);  // If channel name is not changed it's being rate limited. 
            try {
                await channel.updateOverwrite(role, {
                    SEND_MESSAGES: false
                }); 
                message.channel.send(Embed6);
            } catch (err) {
                console.log(err);
                message.channel.send(Embed7); 
            }

        });
    }
}