2012-07-24 10 views
5

Bir şey yapan aşağıdaki Java Sınıfı var, config.properties değerlerini dışarı atar. o fileInputStream kapatmak için zamanı geldiğindefileInputStream.close'u try/catch/finally bloğu ile çevrelemem gerekiyor mu? Nasıl oldu?

, ben nihayet engellemek bir de ona sahip olmak iyi olduğunu Vikipedi'de okumuştum. Çünkü gerçekten denemek/yakalamak blokta gayet iyi çalışıyor.

bir nihayet bölümde fileInputStream.close() almak için beni düzeltme gösterebilir misiniz?

ConfigProperties.java paket taban;

Çözüm yalnızca Eclipse'in önerdiği gibi yapmak ve bunu sonuncu satırda yapmak mı?

finally { 
    try { 
     fileInputStream.close(); 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
} 

Herkese teşekkürler!

+1

: commons-io try blok çıkışları Ancak, Java 7 tanıtımıyla, otomatik olarak beyan edilen kaynaklar kapanacak try-with-resource ifadeler şimdi vardır güzel bir işlevi vardır: IOUtils.closeQuietly(), yakın/deneyin try/catch ilgilenecek. Kodunuz çok daha güzel görünecektir :) Bu fonksiyonun IOException'a yanıt verme şansı vermediğini unutmayın, ancak genelde insanlar bunu yapmaz ve istisnai göz ardı ederler. Yanıt vermeniz gerekiyorsa, bir yığın izlemeyi ya da ne yapmanız gerekip gerekmediğini yazdıran veya kaydeden kendi yardımcı program yöntemini kullanın. – Matt

cevap

7

FileInputStream.close() bir IOException atar ve sonunda {} bloğu durumları yakalamak değil çünkü. Yani ya yakalamanız ya da derlemek için onu bildirmeniz gerekiyor. Eclipse'nin önerisi iyi; Sonunda {} bloğu içinde IOException'ı yakalayın.

+0

Ayrıca [IOUtils.closeQuietly()] (http://commons.apache.org/proper/commons-io/javadocs/api-2.4/org/apache/commons/io/IOUtils.html#closeQuietly (kullanabilirsiniz commons IO'dan java.io.Closeable)) yöntemi. Atılan tüm IOExceptions öğelerini kapatmak için yakın yöntemi sarar. Başka bir try/catch bloğuna sahip olmaktan daha temiz. –

11

Evet, bu ortak öncesi Java 7 çözümdür.

try (FileInputStream fileIn = ...) { 
    // do something 
} // fileIn is closed 
catch (IOException e) { 
    //handle exception 
} 
7

standart yaklaşımdır: Bilginize

FileInputStream fileInputStream = null; 
try { 
    fileInputStream = new FileInputStream(...); 
    // do something with the inputstream 
} catch (IOException e) { 
    // handle an exception 
} finally { // finally blocks are guaranteed to be executed 
    // close() can throw an IOException too, so we got to wrap that too 
    try { 
     if (fileInputStream != null) { 
      fileInputStream.close(); 
     }   
    } catch (IOException e) { 
     // handle an exception, or often we just ignore it 
    } 
} 
İlgili konular