试图使用finally关闭多个流



我有一个打开3个数据流的程序,但我不知道如何关闭它们,这里是程序的关闭部分。

finally {//cerrando muestras
        try{
            if(muestras!=null){
                muestras.close();
            }
        }catch (IOException e) {
            e.printStackTrace();
        }finally {//cerrando salida
        try{
            if(salida!=null){
                salida.close();
            }
        }catch (IOException e){
            e.printStackTrace();
        }
    }
}

我想这是因为我不能做嵌套最后,但我不知道任何其他方法,谢谢你的时间。

您应该使用Java 7中引入的try-with-resource语句,而不是自己关闭流。考虑以下示例:

try (
    BufferedReader br = new BufferedReader(new FileReader(file));
    BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter(out))
) {
    bufferedWriter.write(text);
} catch(IOException e) {
    //log or propagate to the caller
}

观察您如何不必手动关闭BufferedReaderBufferedWriter流。

如果您使用的是java6或更低版本,您可以使用包装为您的close()

public void closeStreams(Closeable c){
  try{
    c.close();
   }
   catch(IOException e){
   }
  finally{
  // well noting here now..
  }
}

你可以用:

finally {//cerrando muestras
            if(muestras!=null){
                muestras.closeStreams();
            }
            if(salida!=null){
                salida.closeStreams();
            }
}

我通常最终会创建一个实用程序方法来做这类事情。

Stream muestras;
Stream salida;
...
finally {
        closeAll( muestras, salida );
    }

public class IoUtils
{
   private IoUtils() {}
   public static void closeAll( Closeable ... cls ) {
      for( Closeable c : cls ) {
         if( c != null )  try {
            c.close();
         } catch( IOException ex ) {
            Logger.getLogger( IoUtils.class.getName() ).
                    log( Level.SEVERE, null, ex );
         }
      }
   }
 }

相关内容

  • 没有找到相关文章

最新更新