2013-07-28 41 views
1

我有一個函數,可以拋出IOException,所以我沒有在內部捕捉異常。但是我有一些資源要關閉。難道是正確的那種方法做,使用try-與資源(沒有任何catch塊):試圖與資源或關閉()困境

public void workOnFiles() throws IOException { 

    try(FileInputStream fis = new FileInputStream("bau.txt");) { 
     // Do some stuff 
    }  
} 

或者我應該做這樣的事情:

public void workOnFiles() throws IOException { 

    FileInputStream fis = new FileInputStream("bau.txt"); 
    // Do some stuff 
    fis.close();  
} 
+0

如果close調用是在finally塊中,第二個是可以接受的。 –

回答

5

在第二屆一個,如果異常被拋出,您的fis將不會被關閉。一個選項是將可引發異常的語句放在try塊中,並在finally塊中關閉fis

但是,由於您已經在Java 7,您應該使用try-with-resource

0

試用資源總是關閉(Closeable resources)資源是否異常提出(Work only java7 onwards)

如果異常提出,則第二個代碼不會關閉資源。
因此,如果您使用的是java7,則可以使用try-with-resources,否則使用tryfinally塊編輯代碼。

finally block guarantees execution irrespective of exception raises or not

0

如果你是熱衷於使用第二種方法,然後關閉資源在finally塊。

public void workOnFiles() throws IOException { 
    FileInputStream fis = null; 
    try { 
    fis = new FileInputStream("bau.txt"); 
    // Do some stuff 
    } 
    finally { 
    try { 
     fis.close(); 
    } 
    catch(Exception e) { 
     //logger.error(e); 
     // e.printStackTrace(); 
    } 
} 
+0

OP正在使用Java7的資源特性嘗試。嘗試使用資源塊,除了'Closeable''''''''''''''''''''''''''以及例外的情況下,它們會自動關閉 – sanbhat

+0

是的,他提到過,如果他需要使用第二種方法,我向他展示了方法! – NINCOMPOOP