Хобрук: Ваш путь к мастерству в программировании

IOException в InputStreamReader

создав класс с несколькими функциями, у меня возникла проблема с одной из этих функций, которая будет использовать ProcessBuilder для отправки команды и получения ее вывода в виде строки, действующей как команда оболочки. Когда я его использую, он перехватывает IOException с номером Bad файла в InputStreamReader и возвращает "ERROR!!!" , вот мой код, если вам нужно что-то узнать об этом комментарии... Я использую команду "ls", кстати, "ls /sdcard/"...

     public String builder(String str) {    
    startTimer(); // A method that gets the current time as int
    String[] array = str.split(" " , 2);
    String cmd = array[0] + " " + array[1];
    System.out.println("\nexecuting: " + cmd + "----");
    String AllText = "";
    try {
        String anyString;
        //Process process = new ProcessBuilder("sh","-c","\"",cmd,"\"").start();
        Process process = new ProcessBuilder(array).start();

        BufferedReader OUT = new BufferedReader(new InputStreamReader(process.getInputStream())); // Here is My error
        BufferedReader ERR = new BufferedReader(new InputStreamReader(process.getErrorStream()));
        try {
            for (int x = endTimer()/* a method which subtracts the startTimer() from current time to get the time passed */ ; endTimer()<= 5000 ; x++){
                process.waitFor();
            }process.destroy();

        } catch (InterruptedException ex) {
            ex.printStackTrace();
        }
        while ((anyString = ERR.readLine()) != null) {
            AllText = AllText + "\n" + anyString;
        }
        while ((anyString = OUT.readLine()) != null) {
            AllText = AllText + "\n" + anyString;
            while ((anyString = ERR.readLine()) != null) {
                AllText = AllText + "\n" + anyString;
            }
        }

        return AllText;
    } catch (Exception ex) {
        ex.printStackTrace();
        return "ERROR!!!";

    }

Вот трассировка стека при нажатии кнопки:

12-03 18:55:36.475: W/System.err(17973): java.io.IOException: read failed: EBADF (Bad file number)
12-03 18:55:36.507: W/System.err(17973):    at libcore.io.IoBridge.read(IoBridge.java:442)
12-03 18:55:36.507: W/System.err(17973):    at java.io.FileInputStream.read(FileInputStream.java:179)
12-03 18:55:36.507: W/System.err(17973):    at java.io.InputStreamReader.read(InputStreamReader.java:244)
12-03 18:55:36.507: W/System.err(17973):    at java.io.BufferedReader.fillBuf(BufferedReader.java:130)
12-03 18:55:36.507: W/System.err(17973):    at java.io.BufferedReader.readLine(BufferedReader.java:354)
12-03 18:55:36.507: W/System.err(17973):    at com.example.activity.over.other.Shells.builder(Shells.java:542)
12-03 18:55:36.507: W/System.err(17973):    at com.example.activity.over.other.MainActivity$2.onClick(MainActivity.java:91)
12-03 18:55:36.514: W/System.err(17973):    at android.view.View.performClick(View.java:4202)
12-03 18:55:36.514: W/System.err(17973):    at android.view.View$PerformClick.run(View.java:17340)
12-03 18:55:36.514: W/System.err(17973):    at android.os.Handler.handleCallback(Handler.java:725)
12-03 18:55:36.514: W/System.err(17973):    at android.os.Handler.dispatchMessage(Handler.java:92)
12-03 18:55:36.514: W/System.err(17973):    at android.os.Looper.loop(Looper.java:137)
12-03 18:55:36.514: W/System.err(17973):    at android.app.ActivityThread.main(ActivityThread.java:5039)
12-03 18:55:36.514: W/System.err(17973):    at java.lang.reflect.Method.invokeNative(Native Method)
12-03 18:55:36.522: W/System.err(17973):    at java.lang.reflect.Method.invoke(Method.java:511)
12-03 18:55:36.522: W/System.err(17973):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
12-03 18:55:36.522: W/System.err(17973):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
12-03 18:55:36.522: W/System.err(17973):    at dalvik.system.NativeStart.main(Native Method)
12-03 18:55:36.522: W/System.err(17973): Caused by: libcore.io.ErrnoException: read failed: EBADF (Bad file number)
12-03 18:55:36.530: W/System.err(17973):    at libcore.io.Posix.readBytes(Native Method)
12-03 18:55:36.530: W/System.err(17973):    at libcore.io.Posix.read(Posix.java:123)
12-03 18:55:36.530: W/System.err(17973):    at libcore.io.BlockGuardOs.read(BlockGuardOs.java:149)
12-03 18:55:36.530: W/System.err(17973):    at libcore.io.IoBridge.read(IoBridge.java:432)
12-03 18:55:36.530: W/System.err(17973):    ... 17 more

  • Ваша цель внедрить оболочку или прочитать список файлов sdcard? Просто любопытно, потому что есть более чистые способы достижения целей, которые вы могли бы преследовать с помощью маршрута оболочки. 03.12.2012
  • @njzk2 , Разместил , посмотри... 03.12.2012
  • @TheCapn Моя цель использования ls состоит в том, чтобы просто убедиться, что метод работает, я хочу, чтобы это облегчило весь этот процесс, чтобы я мог отправить команду и получить ее результат без исключений и с полной простотой. Это то, что я хочу, если вы можете помочь мне найти уже готовый класс, который может делать то, что я хочу, пожалуйста, скажите мне, плюс это всего лишь один метод, в моем классе около 15 методов для такого рода вещей, мне нужно что-то вроде этого ! 03.12.2012
  • Ошибка в первой строке чтения. Возможно, что попытка чтения из ERR, если ERR отсутствует, вызывает проблему. 03.12.2012
  • что мне нужно, это как это исправить :) 03.12.2012

Ответы:


1

Проверьте, не пропустили ли вы это в файле манифеста.

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
03.12.2012
  • Я использовал Read_external_storage, попробую этот... спасибо :) Изменить: не сработало, вернул ОШИБКУ!!! , то же исключение, я опубликую трассировку стека. 03.12.2012
  • Не сработало, пожалуйста, помогите или попробуйте использовать код для себя, если можете, я могу предоставить вам мой проект приложения для тестирования Android, если вам нужно, я использую его только для тестирования и обучения! 04.12.2012
  • Новые материалы

    Деревья классификации и регрессии
    Это мой второй пост об алгоритмах машинного обучения. Мой первый пост посвящен искусственным нейронным сетям, вы можете найти его ниже. Нейронные сети — базовое..

    HMTL - Многозадачное обучение для решения задач НЛП
    Достижение результатов SOTA путем передачи знаний между задачами Область обработки естественного языка включает в себя десятки задач, среди которых машинный перевод, распознавание именованных..

    Решения DBA Metrix
    DBA Metrix Solutions предоставляет удаленного администратора базы данных (DBA), который несет ответственность за внедрение, обслуживание, настройку, восстановление базы данных, а также другие..

    Начало работы с Блум
    Обзор и Codelab для генерации текста с помощью Bloom Оглавление Что такое Блум? Некоторые предостережения Настройка среды Скачивание предварительно обученного токенизатора и модели..

    Создание кнопочного меню с использованием HTML, CSS и JavaScript
    Вы будете создавать кнопочное меню, которое имеет состояние наведения, а также позволяет вам выбирать кнопку при нажатии на нее. Финальный проект можно увидеть в этом Codepen . Шаг 1..

    Внедрите OAuth в свои веб-приложения для повышения безопасности
    OAuth — это широко распространенный стандарт авторизации, который позволяет приложениям получать доступ к ресурсам от имени пользователя, не раскрывая его пароль. Это позволяет пользователям..

    Классы в JavaScript
    class является образцом java Script Object. Конструкция «class» позволяет определять классы на основе прототипов с чистым, красивым синтаксисом. // define class Human class Human {..