2012-12-09 22 views
0

有沒有辦法做到這一點?在JAVA終止程序時發現異常

我正在編寫一個程序,必須迭代很長一段時間,而這樣做,它應該寫入文件。我想在手動終止程序後立即關閉流,並避免由於未關閉流而丟失數據的風險。應該有一種做異常處理的方法,但我不確定。任何類型的建議都非常感謝!

謝謝

+1

使用try-finally從句,其中流在'finally'塊封閉。或者,如果您使用的是Java 7,請使用[try-with-resources block](http://docs.oracle.com/javase/tutorial/essential/exceptions/tryResourceClose.html)。 – Vulcan

回答

0

我找到了一個方法!我沒有注意到程序終止時流會自動關閉......

由於在write()方法後沒有使用flush()方法,數據還沒有被寫入,像這樣:

out.write(line); 
out.flush(); 

謝謝大家的幫助

+1

這不是你的問題的答案!關閉文件,當你不需要它了。 out.close() – AlexWien

2

主:

try { 
    startapp(); 
} finally { 
    closeAll(); 
} 

在CLOSEALL()你做你一個安全關斷 即使異常會ocure finally塊中的代碼將執行做什麼。

+0

它沒有工作......但我找到了一條出路,我會在幾秒內發佈它 – rsy

+0

這個作品!只有當你調用System.exit()你永遠不會做的時候,它纔會起作用。或當虛擬機崩潰與內部錯誤 – AlexWien

1

使用異常來控制程序執行,你描述的方式是糟糕的設計。使用關閉鉤子會更好。

Runtime.getRuntime().addShutdownHook(new Thread() { 
    @Override 
    public void run() { 
     // Close streams here 
    } 
}); 

這將處理大多數正常關機就好了,雖然在硬停止(SIGKILL)的情況下,不能保證關機鉤來運行。但是這並不比如果你試圖通過finally塊關閉流更糟。

+0

我試圖測試這一點,但我無法編譯......但是,我已經發現了這個問題。 – rsy

+0

上面的代碼爲我編譯和工作。你遇到了什麼問題? – Perception