Java IO : Exception Handling

Oleh : Reza Ervani

بسم الله الرحمن الرحيم

Stream dan Readers / Writers perlu ditutup dengan tepat saat kita selesai menggunakannya. Ini dilakukan dengan memanggil metode close() .  Ini membutuhkan sedikit tambahan pula. Perhatikan kode berikut :

InputStream input = new FileInputStream("/home/rezaervani/Documents/inputfile");

int data = input.read();
while(data != -1) {
  //melakukan sesuatu pada data ...
  doSomethingWithData(data);

  data = input.read();
}
input.close();

Potongan kode diatas sekilas tampak oke. Tetapi apa yang terjadi jika suatu eksepsi dilemparkan dari dalam metode doSomethingWithData() ? Maka InputStream tidak akan pernah tertutup.

Untuk menghindari hal tersebut, kita dapat menulis ulang kode tersebut seperti berikut :

InputStream input = null;

try{
  input = new FileInputStream("/home/rezaervani/Documents/inputfile</pre>
<pre>");

 int data = input.read();
 while(data != -1) {
 //melakukan sesuatu pada data ...
 doSomethingWithData(data);

 data = input.read();
 }
}catch(IOException e){
 //melakukan sesuatu pada e... log, mungkin rethrow dll.
} finally {
 if(input != null) input.close();
}

Perhatikan bagaimana InputStream sekarang ditutup didalam sebuah klausa final. Tidak peduli apapun yang terjadi di dalam blok-try, klausa final akan dieksekusi. Karenanya InputStream akan selalu ditutup.

Tetapa apa yang terjadi jika close() menghasilkan eksepsi ? Katakanlah stream sudah ditutup ? Untuk menangkap situasi tersebut, kita harus mengurung panggilan  close() di blok try-catch pula, seperti ini :

} finally {
  try{
    if(input != null) input.close();
  } catch(IOException e){
    //lakukan sesuatu atau abaikan.
  }
}

Kode yang menangani iterasi suatu InputStream (atau OutputStream), dapat terlihat jelek seperti yang kita lihat diatas, apalagi saat kita menerapkan exception handling pula disana. Kode exception handling ini tidak bagus jika ada di sepanjang kode yang kita miliki secara berulang-ulang. Bagaimana jika seseorang terburu-buru dan melompati exception handling ?

Beruntung ada cara untuk mengatasi hal ini. Solusinya disebut “Exception Handling Templates”. Templat tersebut membuat suatu templat exception handling yang secarat tepat menutup stream kita setelah digunakan. Template ini cukup ditulis sekali dan digunakan berulang-ulang di kode kita. Bagus dan sederhana. Kita bahas itu secara terpisah di Template Exception Handling di Java.

About Reza Ervani
Adalah pendiri programming.rezaervani.com -

About Reza Ervani 381 Articles
Adalah pendiri programming.rezaervani.com -

Be the first to comment

Leave a Reply

Your email address will not be published.


*


This site uses Akismet to reduce spam. Learn how your comment data is processed.