2013-04-03 39 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部分。