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

リダイレクト ( >) は OS の機能ではありません。これはシェルの特徴です。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

これを行うために 'cat' を使用する理由はまったくありません。これは Android でサポートまたは推奨されているメカニズムではありません。新しい実行可能ファイルを起動して、1 つのファイルを読み込んで別のファイルに書き出すという Java コードで簡単にできることを実行する理由はありません。

記録のために、シェルのリダイレクトを実行しようとしていますが、シェルを実行していないため、それは機能しません。

于 2012-12-07T19:03:14.667 に答える