2013-04-03 73 views
0

我正在使用以下代碼上傳文件。它工作正常,但問題是,在上傳過程中任意處理文件被絞死(不知道是什麼原因)。FTPClient:沒有得到超時異常

- 可能文件太長。

- 可能是連接無法正常工作。

但它仍然被絞死,最後我不得不手動終止它。所以如果有什麼不對的地方,我怎麼才能認識到超時並不重要,無論什麼原因只是跳過那個文件有一些錯誤。

FTPClient client = new FTPClient(); 
FileInputStream fis = null; 


try { 
    client.connect("32.178.10.121"); 
    client.login("XXX", "XXX"); 

    // 
    // Create an InputStream of the file to be uploaded 
    // 

    File f = new File("D:\\FileFolder"); 
    if (f.isDirectory()) 
    { 
     File[] listFiles = f.listFiles(); 
     for (int i = 0; i < listFiles.length; i++) 
     { 
      String filename = listFiles[i].getName(); 
      fis = new FileInputStream(filename); 
      client.storeFile(filename, fis); 

     } 
    } 

    // 
    // Store file to server 
    // 
    client.logout(); 
} catch (IOException e) { 
    e.printStackTrace(); 
} finally { 
    try { 
     if (fis != null) { 
      fis.close(); 
     } 
     client.disconnect(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
} 

回答

0

一個選項是你可以在一個線程中上傳文件。如果花費很長時間,您可以暫停此線程。

您可以使用ExecutorService爲此目的服務。

檢查此鏈接瞭解如何實現了ExecutorService: How to timeout a thread

您正在使用Apache的百科全書FtpClient? 如果是這樣,您可以嘗試使用getStatus()來持續輪詢狀態並在出現錯誤時關閉。 或者你可以使用setDataTimeout(int timeout)方法來設置超時時間。

0

如果您使用的是JDK 1.7,我會建議嘗試降級到1.6。看起來FTP在Java 7中是buggy,尤其是在使用JDK的庫時。我正在做一個程序,它完全凍結了我的電腦,並會一直上傳,但降級爲我工作。如果它是一個更大的應用程序,則使用JDK 1.6設置另一個項目並嘗試僅使用FTP部分。