IOException,必须被捕获或声明被抛出

时间:2015-11-22 15:36:17

标签: java android exception ioexception

此代码来自以下链接。我试图运行它但得到以下错误:

Thelink

d:\ Android_Dosyalar \幻灯\ TextToArray \应用\ SRC \主\的java \ chessactivetexttoarray \ COM \ texttoarray \ MainActivity.java 错误:(40,21)错误:未报告的异常IOException;必须被抓住或宣布被抛出 错误:(41,22)错误:未报告的异常IOException;必须被抓住或宣布被抛出 错误:(42,21)错误:未报告的异常IOException;必须被抓住或宣布被抛出 错误:任务':app:compileDebugJavaWithJavac'执行失败。

  

编译失败;请参阅编译器错误输出以获取详细信

可能有什么问题。以下部分用红色下划线标出。 新的android。新手级别。 谢谢大家。 此致

            br.close();
            isr.close();
            is.close();

Read and split text file into an array - Android

import android.content.res.AssetManager;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.widget.Toast;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        AssetManager manager;
        String line = null;
        List<String[]> xyzList = new ArrayList<String[]>();
        String[][] xyz;
        InputStream is = null;
        InputStreamReader isr = null;
        BufferedReader br = null;
        try {
            manager = getAssets();
            is = manager.open("C:\\Users\\serhat\\Copy\\satranc\\Akdag_Reportaj\\dan_akdag.pgn");
            isr = new InputStreamReader(is);
            br = new BufferedReader(isr);
               while ((line = br.readLine()) != null) {
                xyzList.add(line.split(" "));
            }
            xyz = (String[][]) xyzList.toArray();
        } catch (IOException e1) {
             Toast.makeText(getBaseContext(), "Problem!",     Toast.LENGTH_SHORT).show();
        } finally {

            br.close();
            isr.close();
            is.close();
        }




    }


}

3 个答案:

答案 0 :(得分:2)

close方法可以抛出异常。所以他们需要抓住他们。

} finally {
    try {
        br.close();
        isr.close();
        is.close();
    } catch(IOException e) {
        e.printStackTrace();
    }
}

您的代码中还有另一个问题会导致它在运行时失败。您正尝试使用AssetManager在Windows计算机上打开文件,而不是手机。将文件移动到项目的资产文件夹中,然后更改

is = manager.open("C:\\Users\\serhat\\Copy\\satranc\\Akdag_Reportaj\\dan_akdag.pgn");

is = manager.open("dan_akdag.pgn");

答案 1 :(得分:0)

您需要捕获close方法可能抛出的IOException:

e.g。

finally {
    try {
        br.close();
        isr.close();
        is.close();
    } catch (IOException e) {
        // dosomething
    }
}

答案 2 :(得分:0)

close方法抛出IOException。你没有围绕close方法的try / catch块。您的代码应如下所示:

...
} finally {
    try {
        br.close();
        isr.close();
        is.close();
    } catch(IOException ex) {
        ex.printStackTrace();
    }
}