最后尝试关闭多个流

Trying to close multiple stream with 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();
        }
    }
}

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

您应该使用 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 或更低版本,您可以使用 wrapper 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 );
         }
      }
   }
 }