2013-04-10 75 views
0

這可能是一個愚蠢的問題,但我一直無法在其他任何地方找到答案。我有一個類將讀取和寫入文件進行保存。現在,我正在嘗試處理可能出現的一些可能的錯誤。我想知道的是,如果這是在Java中的法律或慣例:處理catch塊中的異常?

try { 
    in = new ObjectInputStream(new FileInputStream(fileName)); 
    score = (Score)in.readObject(); 
} catch() { 
    ... 
} 

我遇到的問題是,如果該文件是空的,它無法讀取該文件。程序會崩潰,所以我想知道的是通過常規方法在catch語句中創建文件中的某些數據,然後再次嘗試/捕獲它。然後在第二次捕捉時,我可以使程序崩潰。

我想要這樣做的原因是用戶擦除文件中的數據。

如果它是合法的,這是否是語法?

try { 
    // try something here 
} catch(//Exception here) { 
    // Create a new file and try again. 
    try { 
     // try again 
    } catch() { 
     // Crash the program 
    } 
} 

回答

1

爲什麼你不只是檢查,如果該文件不存在,或者是空的,你嘗試使用它之前?

try { 
    File file = new File(fileName); 
    if(!file.exists() || file.length() == 0) { 
     // Create the file, initialize it with some default value 
    } 
    in = new ObjectInputStream(new FileInputStream(file)); 
    score = (Score)in.readObject(); 
} catch() { 
    ... 
} 

注意,有一個小的競爭條件,它有可能爲用戶刪除時您檢查文件的存在,而真正使用它的FileInputStream內的文件。

+0

是的,這絕對是一個可行的解決方案。我一直在想太久的人,這很難。 – 2013-04-10 02:50:50

0

在catch塊中做這樣的工作通常是不好的形式。如果你想在失敗時重試,使用類似

int retryCount = 0; 
boolean success = false; 
while(!success && retryCount < 2) { 
    retryCount++; 
    try { 
     ... 
     success = true; 
    } catch (Exception ex) { 
     // log exception 
    } 
} 
+0

我明白你在哪裏,但是如果我這樣做,同樣的代碼會再次被觸及,所以如果第一次嘗試失敗,沒有文件被創建到哪裏。如果我這樣做了,我唯一能想到的事情就是在外觀中創建一個if語句,以檢查我們是否在第二次嘗試。如果我們是那麼我們創建文件,然後嘗試。這種形式也不是這樣嗎? – 2013-04-10 02:47:28

+0

這並不理想,但我更喜歡在catch塊中重試的重試循環中使用一個醜陋的if語句。我希望有一個更清潔的選擇,但我畫空白。 – 2013-04-10 02:54:45