2012-06-07 103 views
1

我正在嘗試使用FTP4J(在代碼示例中稱爲客戶端)爲FTP服務器創建監視應用程序。創建一步一步驗證

它連接到FTP,登錄,在本地創建文件,上傳文件,下載文件,驗證文件是否相同,清理FTP和本地文件並斷開連接。

所有這些都已經完成了,但我的問題是如何最好地記錄發生了什麼並在檢測到錯誤時中斷?

我能想到的簡單解決方案是創建一個布爾值,顯示以前的步驟是否成功,並且只有在下一個步驟纔會在哪裏進行。

StringBuilder sb = new StringBuilder(); 
boolean noError = true; 
// Connect to FTP 
try { 
    client.connect(hostname, port); 
} catch (Exception e) { 
    noError = false; 
    sb.append("failed to connect<br>"); 
} 

//Logging in to FTP 
if(noError) { 
    try { 
     client.login(username, password); 

    } catch (Exception e) { 
     noError = false; 
     sb.append("failed to login<br>"); 
    } 
} 
... 
// Close connection 
if(client.isConnected()) { 
    try { 
     client.disconnect(true); 
    } catch (Exception e) { 
     sb.append("failed to disconnect<br>"); 
    } 
} 

另一種解決辦法我能想到的是嵌套的try/catch,但看起來更糟糕,有沒有這樣做的更好的辦法?

+0

它怎麼在'catch'塊裏面有'noError = false'? – adarshr

+0

@adarshr如果你在catch塊中發生錯誤,所以當詢問是否發生了noError時,它應該是false,這個邏輯有什麼問題嗎? – Blem

+0

我感到困惑。這就是爲什麼變量不應該被命名爲負面的原因。你可以簡單地把它稱爲​​'success'並設置爲'false'或者將其稱爲'error',並且在'catch'塊中將其設置爲'true'。 – adarshr

回答

2

解決方法很簡單:不要發現異常。一旦拋出異常並且未被捕獲,整個過程就會停止。或者抓住它,但用適當的錯誤消息將它轉換成你自己的異常,並拋出這個異常。

備註:您應該使用boolean而不是Boolean來存儲不可爲空的布爾值。

+0

清潔,清晰和正確+1 – mprabhat

+0

如何區分發生錯誤的位置?或者我應該只是說發生了錯誤,並將異常添加到日誌中? – Blem

+1

例如,您可以通過捕獲並用適當的錯誤消息引發另一個異常來區分,或者將最後一次嘗試的步驟存儲在變量中。當拋出異常時,你檢查這個變量來知道最後一次嘗試的步驟是什麼。 –

1
StringBuilder sb = new StringBuilder(); 
Boolean noError = true; 
// Connect to FTP 
try { 
    client.connect(hostname, port); 
     client.login(username, password); 

} catch (ConnectException ce) { 
    sb.append("Couldn't connect: "); 
    sb.append(ce.getMessage); 
} catch (LoginException le) { 
    sb.append("Couldn't login: "); 
    sb.append(le.getMessage); 

} finally { 
if(client.isConnected()) { 
    try { 
     client.disconnect(true); 
    } catch (Exception e) { 
     sb.append("failed to disconnect<br>"); 
    } 
} 
+0

我喜歡這個解決方案,但[FTP4J](http://www.sauronsoftware.it/projects/ftp4j/manual.php#20)不使用這些例外。 – Blem

+0

確實,這是一個恥辱FTP4J不區分這兩個例外。 – slipset