Задать вопрос

Runtime.getRuntime().exec: почему не везде работает «cp» команда?

Добрый день!
Есть такой код:

File dir = Environment.getExternalStoragePublicDirectory( Environment.DIRECTORY_DOWNLOADS );
        File src = new File(dir, "test.dat");
        File dst = new File(dir, "test_2.dat");

        if ( src.exists() )
        {
            try
            {
                Process process = Runtime.getRuntime().exec( new String[] {"cp", "-f", src.getAbsolutePath(), dst.getAbsolutePath()} );
                process.waitFor();
            }
            catch (IOException e)
            {
                e.printStackTrace();
            }
            catch (InterruptedException e)
            {
                e.printStackTrace();
            }
        }


Он работает (копирует файл) на Samsung Galaxy S3, но не работает на планшете Amazon Kindle Fire, выдает исключение:

java.io.IOException: Error running exec(). Command: [cp, -f, /mnt/sdcard/Download/test.dat, /mnt/sdcard/Download/test_2.dat] Working Directory: null Environment: null

Почему такое происходит? И как заставить выполнятся эту команду копирования на всех устройствах?
  • Вопрос задан
  • 3308 просмотров
Подписаться 2 Оценить Комментировать
Решения вопроса 1
alexv1981
@alexv1981 Автор вопроса
Разобрался. Оказывается на том планшете не было команды "cp":
/system/bin/sh: cp: not found

Заменил на команду "dd":
Runtime.getRuntime().exec( new String[] {"dd", "if="+src.getAbsolutePath(), "of="+dst.getAbsolutePath()} )
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
arcman
@arcman
Разработчик
лучше делать "busybox cp ..."
у эмбеддед систем весь тулчейн реализуется через единственный выполняемый файл - busybox.
он реализует весь необходимый функционал.
все остальные утилиты получаются путём создания hardlink на него (если busybox назвать cp, то он станет вести себя как cp).
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы