首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >InputStreamReader上的IOException

InputStreamReader上的IOException
EN

Stack Overflow用户
提问于 2012-12-04 00:29:22
回答 1查看 2.3K关注 0票数 0

在创建一个有几个函数的类时,我遇到了其中一个函数的问题,该函数将使用ProcessBuilder发送命令,并将其输出作为字符串,充当外壳命令。当我使用它时,它在InputStreamReader处捕获了一个带有错误文件号的IOException,并返回“ERROR!”,这是我的代码,如果您需要了解有关此注释的任何信息...我使用命令"ls“btw,"ls /sdcard/”...

代码语言:javascript
复制
     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!!!";

    }

下面是按下按钮时的堆栈跟踪:

代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

发布于 2012-12-04 00:42:40

检查您是否在清单文件中遗漏了这一点。

代码语言:javascript
复制
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13687552

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档