FTPClient:没有得到超时异常

时间:2013-04-03 12:01:33

标签: java ftp-client

我正在使用以下代码上传文件。它的工作正常,但问题是在上传过程中任意一个文件被绞死(不知道是什么原因)。

- 可能文件太长了。

- 可能连接无法正常工作。

但它仍然被绞死,最后我必须手动终止它。因此,如果有任何错误,那么我如何能够识别出时间无关紧要,只要跳过该文件就会出现一些错误。

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();
    }
}

3 个答案:

答案 0 :(得分:0)

一个选项是您可以在一个帖子中上传文件。如果花费很长时间,你可以超时这个帖子。

您可以使用 ExecutorService 服务。

检查此链接以了解如何实施ExecutorService: How to timeout a thread

您使用的是apache commons FtpClient吗? 如果是这样,您可以尝试使用 getStatus()来连续轮询状态并在出现错误时关闭。 或者您可以使用 setDataTimeout(int timeout)方法设置超时。

答案 1 :(得分:0)

如果您使用的是JDK 1.7,我建议您尝试降级到1.6。看来FTP在java 7中是错误的,特别是如果你使用的是JDK的库。我正在做一个程序,它只是完全冻结了我的计算机,并且会一直上传,但降级为我工作。如果它是一个更大的应用程序,则使用JDK 1.6设置另一个项目并尝试使用FTP部分。

答案 2 :(得分:0)

您可能想尝试client.setControlKeepAliveTimeout(300);

请参阅(可能重复):Commons FTPClient hangs after uploading large a file