关闭FileInputStream对象会抛出异常

时间:2014-02-08 04:48:25

标签: java ioexception fileinputstream

当我想关闭InputFileStream和OutputFileStream对象时,eclipse说我需要捕获IOException,因此在捕获这些异常之后这是我的代码。 正如您所看到的,我正在捕获两次IOException。是否有一种更简单的方法,我只能有一个块来捕获in.close()和in.read()的IOException?

public class ByteStream {

public static void main(String[] args) {

    FileInputStream in = null;

    try {

        in = new FileInputStream("testdata.txt");
        int nextByte;
        while((nextByte = in.read()) != -1){
            System.out.println(nextByte + "-");
        }
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        if (in != null){
            try {
                in.close();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }

    }
}

}

1 个答案:

答案 0 :(得分:0)

使用Java 7中的try-with-resources语法

try (FileInputStream in = new FileInputStream("testdata.txt");){

    int nextByte;
    while ((nextByte = in.read()) != -1) {
        System.out.println(nextByte + "-");
    }
} catch (FileNotFoundException e) {
    e.printStackTrace();
} catch (IOException e) {
    e.printStackTrace();
} 

编译器将负责将上述代码转换为关闭in InputStream或在AutoCloseable部分中声明和实例化的任何其他()对象的代码。 try表达式。