Запустите команду cat в Android - PullRequest
3 голосов
/ 14 октября 2011

Я хочу объединить два файла в Android. Я сделал это из приложения Terminal Emulator с помощью команды cat file1 file2 > output_file. Но это не работает, когда я пытаюсь выполнить его из своего кода.

Это код, который я использовал для выполнения команды.

    public String exec() {
    try {

        // Executes the command.
        String CAT_COMMAND = "/system/bin/cat /sdcard/file1 /sdcard/file2 > /sdcard/output_file";
        Process process = Runtime.getRuntime().exec(CAT_COMMAND);

        // Reads stdout.
        // NOTE: You can write to stdin of the command using
        //       process.getOutputStream().
        BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
        int read;
        char[] buffer = new char[4096];
        StringBuffer output = new StringBuffer();
        while ((read = reader.read(buffer)) > 0) {
            output.append(buffer, 0, read);
        }
        reader.close();

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

        return output.toString();
    } catch (IOException e) {

        throw new RuntimeException(e);

    } catch (InterruptedException e) {

        throw new RuntimeException(e);
    }
}

Я дал разрешение на запись во внешнее хранилище в манифесте. Чего мне не хватает?

1 Ответ

1 голос
/ 14 октября 2011

Как отмечено в комментарии, вам нужна оболочка для перенаправления вывода процесса (через >).

Вы можете просто добавить файлы с помощью этого кода:

void append(File src, File dst) throws IOException {
    InputStream in = new FileInputStream(src, true);  // `true` means append 
    OutputStream out = new FileOutputStream(dst);

    // Transfer bytes from in to out
    byte[] buf = new byte[1024];
    int len;
    while ((len = in.read(buf)) > 0) {
       out.write(buf, 0, len);
    }
    in.close();
    out.close();
}

В вашем случае вызовите его дважды для file1 и file2.

...