1.看下方法是否throws Exception了,否则的话肯定不合规范不能通过编译
2.close方法本身会抛出异常(因为如果你已经关闭过一次了再关闭肯定是非法操作),所以需要捕获这个异常再进行处理。

解决方案 »

  1.   

    能给个典型的多流资源释放的代码例子吗?实在头大啊,
    1中的方法是声明抛出异常,可抛出异常不能解决私有变量is的资源释放问题啊
    因为有可能InputStream是全局变量,所以是在一个方法中new 在另一个方法中释放
    无论如何,没有主动释放的代码不是好代码这是肯定的
    典型的
    InputStream is = null;
    try {
        is = new FileInputStream(new File("text.txt"));
        ....
    } catch (Exception e) {
        e.printStackTrace();
    } finally {
        try {
            if(is != null)
                is.close();
        } catch (Exception e2) {
            e2.printStackTrace();
            is = null;
        }
    }
    纯手打代码,可能不一定准确但就是这么个意思
      

  2.   

    能给个典型的多流资源释放的代码例子吗?实在头大啊,
    1中的方法是声明抛出异常,可抛出异常不能解决私有变量is的资源释放问题啊
    因为有可能InputStream是全局变量,所以是在一个方法中new 在另一个方法中释放
    无论如何,没有主动释放的代码不是好代码这是肯定的
    典型的
    InputStream is = null;
    try {
        is = new FileInputStream(new File("text.txt"));
        ....
    } catch (Exception e) {
        e.printStackTrace();
    } finally {
        try {
            if(is != null)
                is.close();
        } catch (Exception e2) {
            e2.printStackTrace();
            is = null;
        }
    }
    纯手打代码,可能不一定准确但就是这么个意思
    如果有多个流要释放,那是不是要在finally块中写多个try块?
      

  3.   

    Java7的特性try-with-resources可以写起来比较优雅
    try(InputStream is = new BufferedInputStream(new FileInputStream(xxx))){
      //...
    }
    不用写finally,也不用里面再套个try-catch,自动给你close
      

  4.   

    能给个典型的多流资源释放的代码例子吗?实在头大啊,
    1中的方法是声明抛出异常,可抛出异常不能解决私有变量is的资源释放问题啊
    因为有可能InputStream是全局变量,所以是在一个方法中new 在另一个方法中释放
    无论如何,没有主动释放的代码不是好代码这是肯定的
    典型的
    InputStream is = null;
    try {
        is = new FileInputStream(new File("text.txt"));
        ....
    } catch (Exception e) {
        e.printStackTrace();
    } finally {
        try {
            if(is != null)
                is.close();
        } catch (Exception e2) {
            e2.printStackTrace();
            is = null;
        }
    }
    纯手打代码,可能不一定准确但就是这么个意思
    如果有多个流要释放,那是不是要在finally块中写多个try块?一个try也可以啊。要是异常的范围小可以  抛更大的异常
      

  5.   

    能给个典型的多流资源释放的代码例子吗?实在头大啊,
    1中的方法是声明抛出异常,可抛出异常不能解决私有变量is的资源释放问题啊
    因为有可能InputStream是全局变量,所以是在一个方法中new 在另一个方法中释放
    无论如何,没有主动释放的代码不是好代码这是肯定的
    典型的
    InputStream is = null;
    try {
        is = new FileInputStream(new File("text.txt"));
        ....
    } catch (Exception e) {
        e.printStackTrace();
    } finally {
        try {
            if(is != null)
                is.close();
        } catch (Exception e2) {
            e2.printStackTrace();
            is = null;
        }
    }
    纯手打代码,可能不一定准确但就是这么个意思
    如果有多个流要释放,那是不是要在finally块中写多个try块?一个try也可以啊。要是异常的范围小可以  抛更大的异常
    不是抛,是catch更大异常呵呵呵
      

  6.   

      你对整体的流程都不熟悉,try  这里是要处理异常的部分   catch  一旦发生异常 的处理部分  
      finally   不管发不发生异常都会执行      你那所谓 的异常没有得到处理,  才导致。。
      

  7.   

    能给个典型的多流资源释放的代码例子吗?实在头大啊,
    1中的方法是声明抛出异常,可抛出异常不能解决私有变量is的资源释放问题啊
    因为有可能InputStream是全局变量,所以是在一个方法中new 在另一个方法中释放
    无论如何,没有主动释放的代码不是好代码这是肯定的
    典型的
    InputStream is = null;
    try {
        is = new FileInputStream(new File("text.txt"));
        ....
    } catch (Exception e) {
        e.printStackTrace();
    } finally {
        try {
            if(is != null)
                is.close();
        } catch (Exception e2) {
            e2.printStackTrace();
            is = null;
        }
    }
    纯手打代码,可能不一定准确但就是这么个意思
    如果有多个流要释放,那是不是要在finally块中写多个try块?
    把所有的流的释放,放在一个try块就可以了,因为他们产生的异常都是一样,可以放在一起处理
      

  8.   


    能给个典型的多流资源释放的代码例子吗?实在头大啊,
    1中的方法是声明抛出异常,可抛出异常不能解决私有变量is的资源释放问题啊
    因为有可能InputStream是全局变量,所以是在一个方法中new 在另一个方法中释放
    无论如何,没有主动释放的代码不是好代码这是肯定的
    典型的
    InputStream is = null;
    try {
        is = new FileInputStream(new File("text.txt"));
        ....
    } catch (Exception e) {
        e.printStackTrace();
    } finally {
        try {
            if(is != null)
                is.close();
        } catch (Exception e2) {
            e2.printStackTrace();
            is = null;
        }
    }
    纯手打代码,可能不一定准确但就是这么个意思
    如果有多个流要释放,那是不是要在finally块中写多个try块?
    把所有的流的释放,放在一个try块就可以了,因为他们产生的异常都是一样,可以放在一起处理
    ===================================
    我虽然接触java时间不长,但至少已经有10年的C#经验
    请解释一下吧,多个流一起关闭的问题:
    InputStream is = null;
    OutputStream os = null;
    try
    {
       使用is和os进行操作
    }
    finally
    {
       try
       { 
          os.close();//这里出现异常,是不是会抛出?那下面的is还会close吗?不应该每个单独try吗?
          is.close();
       }
       catch(Exception ex){}
    }